var fn1 = function(){};
var fn2 = function abc(){};
问题1:
1.函数表达式,什么情况下赋值匿名函数,什么情况下赋值有名字的函数?
var fn1 = function(){};
var fn2 = function abc(){};
问题1:
1.函数表达式,什么情况下赋值匿名函数,什么情况下赋值有名字的函数?
回答:
1.一般将匿名函数赋值给一个变量是为了方便后面的调用
2.函数声明只能出现在程序或函数体内。从句法上讲,它们 不能出现在Block(块)({ ... })中,例如不能出现在 if、while 或 for 语句中。因为 Block(块) 中只能包含Statement语句, 而不能包含函数声明这样的源元素。另一方面,仔细看一看规则也会发现,唯一可能让表达式出现在Block(块)中情形,就是让它作为表达式语句的一部分。但是,规范明确规定了表达式语句不能以关键字function开头。而这实际上就是说,函数表达式同样也不能出现在Statement语句或Block(块)中(因为Block(块)就是由Statement语句构成的)。
详情参阅深入理解JavaScript系列(2):揭秘命名函数表达式
以前没怎么想过这个问题,刚在stackoverflow上看到一个回答,还不错(英语不好,就是感觉很吊的样子)
chrome console 里运行的结果
var s = function ff(){console.log('111');}
undefined
typeof(ff)
"undefined"
typeof(s)
"function"
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
匿名函数的名字只有在函数体内可见,所以使用带名字的匿名函数的唯一目的就是:函数需要引用自身。
例如:
你可能说了,直接使用loop引用它不就行了。当然可以,但是由于fn的可见范围更小,不会被外界修改,所以更好。