js所有的变量声明都会被提升到顶部吗?
发布网友
发布时间:2022-04-07 05:36
我来回答
共1个回答
热心网友
时间:2022-04-07 07:06
【所有的变量声明被提升到顶部】, 你这句话有瑕疵。
变量提升,这个指的是相同作用域下的变量,提升到当前域的顶部。比如
function test () {
console.log(a); // 返回undefined, 不会报错 (test函数内部访问)
var a = 1;
var b = 2;
}
console.log(a); // 直接报错, a is not defined (test函数外部访问)
a 和 b 都是在 test 函数内部声明的,所以他们都处于 test 的函数作用域中,声明被提升到顶部,所以你在test里面访问是没问题的。
但是当你在test函数外部访问 a 时,是会报错的。因为 a 变量的提升只会在 test 函数里面被提升。不会提升到最外面来。
其实变量提升是 ES5 阶段的特性(即通过 var 关键字声明的变量),在 ES6 中通过 let 声明的变量是不存在变量提升的。ES5 没有块级作用域,而ES6存在块级作用域。