函数声明提升优先级高于变量声明提升; 提升就是声明(变量/函数)提至当前作用域的最顶部,赋值语句留在原地
执行以下程序,输出结果为()
A
1
B
2
C
undefined
D
抛出异常
正确答案:C
虽然return 语句可以终止函数,但是return语句后如果有变量和函数声明,仍然存在变量提升和函数提升,
即在函数fn内,函数b和局部变量a会提升到函数的开头部分。
当调用函数b时,需要查找并输出a的值,根据作用域链查找规则,会先在函数fn内找到已经声明的局部变量a,由于局部变量a的赋值并未跟着发生提升,因此输出的a值为undefined,C选项正确。
这是考察JS中提升(hoist)的问题,也就是变量提升和函数提升
要注意几个点
1.函数声明提升优先级高于变量声明提升
2.提升就是声明(变量/函数)提至当前作用域的最顶部,赋值语句留在原地,
3.函数创建有3个形式,函数声明和函数表达式 以及 new Function构造函数。
4.只有函数声明才有函数提升。...其实2个都有提升,表达式提升的是变量了。
函数声明和函数表达式的区别(以及提升的不同)
就是function左边没有东西就是函数声明,有就是表达式
函数发生提升后
JS中所有声明(val / let / const /function() /class / function*) 都存在提升,不过像let const class这些因为TDZ的原因‘表现’得像没有提升。
__EOF__

本文作者:龙陌
本文链接:https://www.cnblogs.com/longmo666/p/17835970.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/longmo666/p/17835970.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)