JavaScript词法作用域疑问:先赋值bob为何输出alice相关结果?
问题原因解析
- 函数
greet里的user是全局变量,它的值不会在函数定义时固定,而是在函数执行时才读取当前的实际值。 - 你的代码执行顺序是:
- 声明
user并赋值为空字符串 - 定义
greet函数(此时函数里的user还未绑定具体值) - 把
user改成"bob" - 再把
user改成"alice"(这一步直接覆盖了之前的"bob"赋值) - 调用
greet函数,此时user的当前值是"alice",所以:console.count(user)会以"alice"为标签计数,输出alice:1- 返回的模板字符串会拼接当前的
user值,得到hi alice
- 声明
- 总结:"bob"这个赋值被后续的"alice"覆盖了,而函数是最后才执行的,自然只会用到
user的最终值。
内容的提问来源于stack exchange,提问作者Angus
相关产品推荐
相关产品推荐

