javascript函数声明表达式问题。

var fn1 = function(){};
var fn2 = function abc(){};

问题1:
1.函数表达式,什么情况下赋值匿名函数,什么情况下赋值有名字的函数?

阅读 2.8k
4 个回答

匿名函数的名字只有在函数体内可见,所以使用带名字的匿名函数的唯一目的就是:函数需要引用自身。

例如:

var loop = function fn() { 
    console. log('bingo');
    setTimeout(fn); // 此处调用了自己
}

你可能说了,直接使用loop引用它不就行了。当然可以,但是由于fn的可见范围更小,不会被外界修改,所以更好。

回答:
1.一般将匿名函数赋值给一个变量是为了方便后面的调用
2.函数声明只能出现在程序或函数体内。从句法上讲,它们 不能出现在Block(块)({ ... })中,例如不能出现在 if、while 或 for 语句中。因为 Block(块) 中只能包含Statement语句, 而不能包含函数声明这样的源元素。另一方面,仔细看一看规则也会发现,唯一可能让表达式出现在Block(块)中情形,就是让它作为表达式语句的一部分。但是,规范明确规定了表达式语句不能以关键字function开头。而这实际上就是说,函数表达式同样也不能出现在Statement语句或Block(块)中(因为Block(块)就是由Statement语句构成的)。
详情参阅深入理解JavaScript系列(2):揭秘命名函数表达式

var a = function b(){debugger;};
a();

在控制台试下,你可以看到调用栈是b,方便调试。
否则你只能看到匿名函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题