Javascript 为什么函数返回未执行
如果我写这段代码:Javascript 为什么函数返回未执行,javascript,Javascript,如果我写这段代码: var foo = function (){ var x = 5; return (function (){ return x;})(); } alert(foo()); 它会按预期向5发出警报。但是,如果我不使用生命: var foo = function (){ var x = 5; return function (){ return x;}; } alert(foo()); 它提醒 function(){return x;}
var foo = function (){
var x = 5;
return (function (){ return x;})();
}
alert(foo());
它会按预期向5发出警报。但是,如果我不使用生命:
var foo = function (){
var x = 5;
return function (){ return x;};
}
alert(foo());
它提醒
function(){return x;}
我知道在第一个例子中,IIFE运行并返回它计算的任何内容。但是,如果不使用IIFE函数,则返回而不执行。
为什么函数在执行之前返回?在第二个示例中,基本上,在返回任何内容之前,您不会执行函数。您正在返回一个函数定义,其中包含此行:
returnfunction(){returnx;}代码>。这就是为什么函数只返回您放置在JS中的返回
函数之后的函数是第一类对象。您可以像对待任何对象一样对待它们,包括在函数之间传递它们
如果你不做一些事情来调用一个函数,那么它就不会被调用
在第二个选项中收到警报的函数(){return x:}也是字符串吗
这是一个函数
函数与任何对象一样,都有一个toString
方法
alert()
希望传递一个字符串。因为您向它传递了一个对象,所以它将被转换为字符串,这是通过调用toString()
函数来完成的。函数永远不会被自动调用。它们可以作为参数传递、作为值返回、分配给变量等等,这只是围绕函数的引用移动。要调用函数,必须使用()
运算符
您的第一个示例通过调用IIFE中的函数来实现这一点。“II”代表“立即调用”,是指将()
放在匿名函数表达式后面,以便您定义它,然后立即调用它
在第二个示例中,只需返回函数,然后将其作为参数传递给alert()
alert()
没有理由调用该函数(它不像map()
或forEach()
,它们接受回调参数并指定调用该函数)。如果要执行该函数,需要显式调用它,例如
var foo=function(){
var x=5;
返回函数(){
返回x;
};
}
警报(foo())因为您的代码不涉及对函数的调用。这就是工作示例中最后一个()
所做的。您想做什么?嗯……您显式地返回函数…
;返回一个函数。你没打电话。不清楚惊喜在哪里。好的,另一个:IsDid你的意思是做foo()()
?因此,如果传递一个对象以发出警报,它会自动将其转换为字符串,使用toString()?@Yozex,这正是答案的最后一行所说的。