一个关于let块级作用域的问题,safari和Chrome下表现不一致
如题,先上代码:
if(1===1) {
let nameSet = new Set();
if (1 === 2) {
// do nothing
}
else {
function getArrayFromOl() {
console.log('nameSet:', nameSet)
}
getArrayFromOl()
}
}
这段代码在 safari 11.0.3 中报错:
ReferenceError: Can't find variable: nameSet
但是在 Chrome 中却能访问到相关变量。
我认为也应该能访问到相关变量...
有没有大神可以解释下..safari下为何报错?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ps:函数声明不要写在条件语句中,拿出来
补充:
问题主要原因是chrome和safari对于函数在条件语句中声明表现不一致导致的。可以用以下代码验证
而题主的问题原因是:在
safari
中getArrayFromOl
函数相当与已经提升到最外层的if
之外,而nameSet
由于是let
声明,所以作用域在第一个if内
,所以getArrayFromOl
取不到相应的值