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