javascript函数声明表达式问题。
怪我咯
怪我咯 2017-04-11 11:40:10
[JavaScript讨论组]

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

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
PHP中文网

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

例如:

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,方便调试。
否则你只能看到匿名函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号