foo
是一个调用自身的函数,其中有一个函数 bar
这也称为它自己。然后我暴露bar
。但为什么它后来说“foo”是undefined
?
var foo = (function(){
var bar = (function(t){
console.log(t);
})('test 1');
return bar;
})();
console.log(foo); // output: undefined
更新:
我想做这样的事情:
var foo = (function foo(){
(function bar(t){
console.log(t);
})('test 1');
return { bar : bar };
})();
foo.bar('test 2');
现在仅此bar
不被识别..似乎我无法自行执行一次,但仍将其作为返回值传递..
最佳答案
foo
函数立即调用自身,因此它的返回值被分配给 foo
。它返回 bar
的返回值,因为它也立即调用自身,并且由于 bar
返回 undefined
,foo
也返回 undefined
:
// Outer function, immediately invoked
var foo = (function(){
// Inner function, immediately invoked
var bar = (function(t){
console.log(t);
// Implicitly return undefined
})('test 1');
// bar is now === undefined
return bar;
})();
console.log(foo); // output: undefined
关于Javascript 模式表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16419344/