2014-10-02 53 views
1

嘿,从另一个运行一个函数有点困惑。我曾尝试是:从javascript中的其他函数执行另一个函数

var a = (function() { 
    var babe = function() { 
     console.log('yay'); 
    }; 
})(); 

当我运行像a.babe()代码它给我的错误一样TypeError: Cannot read property 'babe' of undefined。为什么会发生这样的事情?

我想从a调用函数babe ...我该怎么做? 我希望你们能帮助我...

在此先感谢。

回答

3

您正在创建一个名为babe功能,它仅停留周围的立即调用函数表达式(IIFE)的范围之内。由于您没有将任何内容返回给调用者,因此默认情况下,函数调用将评估为undefined,并将存储在a中。这就是为什么你所得到的错误,

TypeError: Cannot read property 'babe' of undefined 

这意味着,您要访问的undefined值称为babe属性。在这种情况下,aundefined

代替这一切,你可以简单地返回从IIFE的babe功能,包裹在一个对象,这样

var a = (function() { 
    return { 
     babe: function() { 
      console.log('yay'); 
     } 
    }; 
})() 

现在,返回的对象被分配到a,你可以调用babe功能像这样

a.babe(); 
0

babe是该代码中的IIFE的局部变量。它不返回。它不是任何东西的财产。它无法访问。

如果你想从外部调用它,你必须公开地公开它。


var a = (function() { 
     var babe = function() { 
      console.log('yay'); 
     } 
     return babe; 
    })(); 

    a(); 

var a = (function() { 
     var babe = function() { 
      console.log('yay'); 
     } 
     return { 
      "babe": babe 
     }; 
    })(); 

    a.babe(); 
0

你为什么做了自动执行功能?你想要做的就是让一个函数的对象a为的babe一部分,只需做到这一点:

var a = { 
 
    babe: function() {document.write('yay');} 
 
} 
 

 
a.babe();

。我有一个对象a和附加功能babe内它..然后使用点符号访问对象内的功能a

0

要使用您的代码,您必须执行

var a = (function() { 
    var babe = function() { console.log('yay'); } 
    return babe 
})(); 

a(); 

要使它a.babe()看看@thefourtheye或@Quentin。

0

点语法用于访问对象的“属性”。因此,在一个简单的例子,你可以使用类似:

var a = { 
    babe: function(){ console.log('yay') } 
}; 

a.babe(); // yay 

在您的例子的情况下,如果你想创建一个封闭隐藏在全局范围内的其他变量和函数,你必须返回然后,将获得分配给a对象:

var a = (function() { 
    return { 
     babe: function(){ console.log('yay') } 
    } 
})(); 

a.babe(); // yay 

记住,任何时候你使用点,前面的变量是一个对象。

相关问题