如题,先上代码:
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下为何报错?
ps:函数声明不要写在条件语句中,拿出来
补充:
问题主要原因是chrome和safari对于函数在条件语句中声明表现不一致导致的。可以用以下代码验证
而题主的问题原因是:在
safari
中getArrayFromOl
函数相当与已经提升到最外层的if
之外,而nameSet
由于是let
声明,所以作用域在第一个if内
,所以getArrayFromOl
取不到相应的值