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
无法识别..似乎我不能自行执行一次,但将其作为返回值传递..
答案 0 :(得分:2)
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
答案 1 :(得分:2)
的函数
foo
是一个自称为
没有。 foo
是立即调用匿名函数的返回值。
但为什么后来说'foo'是
undefined
?
该函数返回bar
,这是对另一个匿名函数的另一个立即调用的返回值。
该函数的返回值是,因为其中没有return
语句:undefined
(所以bar
是undefined
所以foo
是{ {1}}。
答案 2 :(得分:1)
根本没有表现得很奇怪。
var bar = (function(t){
console.log(t);
// return undefined;
})('test 1');
return bar; // again return undefined;
它没有return
语句,因此返回undefined
。然后,您再次返回undefined
,因此很明显foo
也将undefined
。
答案 3 :(得分:1)
foo
不是函数,而是匿名函数的返回
function(){
var bar = (function(t){
console.log(t);
})('test 1');
return bar;
}
返回的是bar
,即匿名函数的返回
function(t){
console.log(t);
}
t == 'test 1'
。此函数不返回任何内容,因此bar
未定义,以及foo
。
答案 4 :(得分:0)
我读到这个的方式:你没有回酒吧,你正在返回bar的结果('test 1');这是未定义的。
答案 5 :(得分:0)
答案 6 :(得分:0)
bar不会返回值,因此foo也不会。
答案 7 :(得分:0)
因为条形函数没有返回任何内容。在javascript中没有返回值的函数返回undefined。
如果您将栏更改为:
var bar = (function(t){
return t;
})('test 1');
你的foo将不再是未定义的。