标签:code 问题 const 函数声明 访问 使用 纠正 html 标题
只能说,js所谓的变量提升,是设计缺陷,让很多新老手迷惑。好在ES6出了let和const,杜绝了大部分的变量提升问题,下面引述一位博友的话,他说的 “标识符提升”确实更为妥当。
首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许变量不声明就可以访问,或声明在后使用在前。新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑。但在 ES6 加入 let/const 后,变量Hoisting 就不存在了。
变量提升优先级:函数声明
>var形式的函数声明
=var声明
var声明提升:
function test(){
console.log(a);
var a=22;
}
test(); //输出undefined
上述代码等同于:
function test(){
var a; //只是先被声明而已
console.log(a);
a=22; //负值
}
test(); //输出undefined
function test(){
console.log(a());
function a(){
return 2;
}
}
test(); // 控制台输出:2
等同于:
function test(){
function a(){ //刚才声明的函数会被提升
return 2;
}
console.log(a());
}
test(); // 控制台输出:2
标签:code 问题 const 函数声明 访问 使用 纠正 html 标题
原文地址:https://www.cnblogs.com/panshaojun/p/14690964.html