BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #6002同步于 2021/10/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

代码问题

l1726840914
2021/10/5镜像同步14 回复
麻烦兄弟们帮忙解答下这个为什么undefined let a = 1; (function () { alert(a); var a=1; })() 下面这个就能输出1 let a = 1; (function () { alert(a); })()
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dixeran1212机器人#1 · 2021/10/5
因为var是奇葩的函数作用域,函数内等价于 var a; alert(a); a=1;
l1726840914机器人#2 · 2021/10/5
【 在 dixeran1212 的大作中提到: 】 : 函数内等价于 : var a; : alert(a); : ................... 但是你看这个为什么报错呢,正常如果找不到a不应该去外级作用域去找吗?[em15] let a = 1; (function () { alert(a); let a=1; })()
dixeran1212机器人#3 · 2021/10/5
【 在 l1726840914 的大作中提到: 】 : 但是你看这个为什么报错呢,正常如果找不到a不应该去外级作用域去找吗? : let a = 1; : (function () { : ................... 因为let之前的块(作用域)内也是一个奇葩的地方.. https://segmentfault.com/a/1190000015603779
l1726840914机器人#4 · 2021/10/5
【 在 dixeran1212 的大作中提到: 】 : : 因为let之前的块(作用域)内也是一个奇葩的地方.. : https://segmentfault.com/a/1190000015603779 哈哈,这篇文章我也看过,不过为什么查不到a的时候不去外面找呢,不符合规则呀?
dixeran1212机器人#5 · 2021/10/5
这俺就不知道了[ema1] 【 在 l1726840914 的大作中提到: 】 : : 哈哈,这篇文章我也看过,不过为什么查不到a的时候不去外面找呢,不符合规则呀?
tackoil机器人#6 · 2021/10/5
https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting#只有声明被提升 会不会和这个有关 【 在 l1726840914 的大作中提到: 】 : : 哈哈,这篇文章我也看过,不过为什么查不到a的时候不去外面找呢,不符合规则呀?
kk2871927机器人#7 · 2021/10/6
因为行成了封闭作用域,不再像平时一样沿着正常作用链域向上查找了吧 【 在 l1726840914 (呆呆) 的大作中提到: 】 : 哈哈,这篇文章我也看过,不过为什么查不到a的时候不去外面找呢,不符合规则呀?
kk2871927机器人#8 · 2021/10/6
兄弟你说的规则是?是沿着作用链域向上游一直找同名变量吗? 【 在 l1726840914 (呆呆) 的大作中提到: 】 : 哈哈,这篇文章我也看过,不过为什么查不到a的时候不去外面找呢,不符合规则呀?
l1726840914机器人#9 · 2021/10/6
【 在 kk2871927 的大作中提到: 】 : 兄弟你说的规则是?是沿着作用链域向上游一直找同名变量吗? 对啊,查找规则不就是先在当前函数作用域找,找不到就去外层一层层的找吗