javascript中返回函数和返回函数名有什么区别?
1:以下返回的是函数名:functionfoo(x,y){vartmp=3;functionbar()//创建普通函数{alert(x+y+(++tmp));}retur...
1:以下返回的是函数名:
function foo(x,y) {
var tmp = 3;
function bar() //创建普通函数
{
alert(x + y + (++tmp));
}
return bar(); //返回函数名
}
var ff = foo(2,10);//这边为什么是直接调用函数,然后输出16;而不是获取函数,以待需要调用的时候调用:,为什么?
2:以下返回的是函数:
function foo(x,y) {
var tmp = 3;
return function() //返回匿名函数
{
alert(x + y + (++tmp));
}
}
var ff = foo(2,10);//这边是获取函数,以待需要调用的时候调用,不会输出16;和上面的返回函数名有什么区别? 展开
function foo(x,y) {
var tmp = 3;
function bar() //创建普通函数
{
alert(x + y + (++tmp));
}
return bar(); //返回函数名
}
var ff = foo(2,10);//这边为什么是直接调用函数,然后输出16;而不是获取函数,以待需要调用的时候调用:,为什么?
2:以下返回的是函数:
function foo(x,y) {
var tmp = 3;
return function() //返回匿名函数
{
alert(x + y + (++tmp));
}
}
var ff = foo(2,10);//这边是获取函数,以待需要调用的时候调用,不会输出16;和上面的返回函数名有什么区别? 展开
2个回答
展开全部
第一个情况,return bar(); 就是 运行 bar(),然后将 bar()的返回值再作为foo的返回值,当你调用 foo(2,10)的时候,将会运行 bar(),即弹出16。
第二种情况,将一个函数作为返回值,所以var ff = foo(2,10); ff就是那个匿名函数,你可以 ff(); 试试 ,看看是不是弹出16.
猜想, 如果 将第一种情况 return bar(); 改成 return bar; 可能就跟第二种情况一样了,这才是返回函数名,没测试过,不知道是否可以这样。
第二种情况,将一个函数作为返回值,所以var ff = foo(2,10); ff就是那个匿名函数,你可以 ff(); 试试 ,看看是不是弹出16.
猜想, 如果 将第一种情况 return bar(); 改成 return bar; 可能就跟第二种情况一样了,这才是返回函数名,没测试过,不知道是否可以这样。
追问
你说得对,将return bar(),改成return bar,是和第二种情况一样,但不是你说的那种情况,就是返回函数名!是和返回函数一样(return function(){.....});
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询