嘿,伙计们在运行另一个函数时有点困惑。我试过的是:
var a = (function() {
var babe = function() {
console.log('yay');
};
})();
当我运行像a.babe()
这样的代码时,它会给我一个像TypeError: Cannot read property 'babe' of undefined
这样的错误。为什么会这样发生?
我想从babe
调用函数a
...我怎么能这样做?
我希望你们能帮助我......
提前致谢。
答案 0 :(得分:3)
您正在创建一个名为babe
的函数,它仅在其周围立即调用的函数表达式(IIFE)的范围内。由于您没有向调用者返回任何内容,因此默认情况下,函数调用将被计算为undefined
,并将存储在a
中。这就是你得到错误的原因,
TypeError: Cannot read property 'babe' of undefined
这意味着,您尝试在babe
值上访问名为undefined
的属性。在这种情况下,a
为undefined
。
而不是所有这些,你可以简单地从IIFE返回babe
函数,包裹在一个对象中,就像这样
var a = (function() {
return {
babe: function() {
console.log('yay');
}
};
})()
现在,返回的对象已分配给a
,您可以像这样调用babe
函数
a.babe();
答案 1 :(得分: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();
答案 2 :(得分:0)
为什么你做了一个自动执行功能?您要做的是为此创建一个对象 babe
的函数a
,只需执行此操作:
var a = {
babe: function() {document.write('yay');}
}
a.babe();
我创建了一个对象a
并在其中添加了一个函数babe
..然后使用点表示法访问对象a
内的函数
答案 3 :(得分:0)
要使用您的代码,您必须
var a = (function() {
var babe = function() { console.log('yay'); }
return babe
})();
a();
让a.babe()
看看@thefourtheye或@Quentin。
答案 4 :(得分:0)
点语法用于访问对象的“属性”。所以,在一个简单的例子中,你可以使用类似的东西:
var a = {
babe: function(){ console.log('yay') }
};
a.babe(); // yay
对于您的示例,如果要创建闭包以隐藏全局范围中的其他变量和函数,则必须返回一个对象,然后将其分配给a
:
var a = (function() {
return {
babe: function(){ console.log('yay') }
}
})();
a.babe(); // yay
请记住,无论何时使用点,前面的变量都是对象。