js中 const、var、let区别与变量提升
js中const,var,let区别与用法
1.const定义的变量不可以修改,而且必须初始化。
1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:' + b);//无法输出
2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
1 var a = 1; 2 // var a;//不会报错 3 console.log('函数外var定义a:' + a);//可以输出a=1 4 function change(){ 5 a = 4; 6 console.log('函数内var定义a:' + a);//可以输出a=4 7 } 8 change(); 9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4
3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。
1 let c = 3; 2 console.log('函数外let定义c:' + c);//输出c=3 3 function change(){ 4 let c = 6; 5 console.log('函数内let定义c:' + c);//输出c=6 6 } 7 change(); 8 console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
js中的变量提升
在非严格模式下,JavaScript中存在变量提升的特点。
1. 原因
JavaScript的工作原理是先编译再执行,在编译过程中,解释器会把所有声明“移动”到所在作用域的最上面,而赋值或其他逻辑会留在原地,这就是变量提升。
例如
foo(); function foo(){ console.log(a); // undefined var a = 2; }
在编译后将被理解为下面的形式
function foo(){ var a; console.log(a); // undefined a = 2; } foo();
2.函数优先
在提升过程中,函数声明将首先提升,然后才是变量。只有函数声明( function a(){} )才会被提升,函数表达式( var a = function b(){} )不会提升。如果存在相同的声明,相同的变量声明将被忽略;相同的函数声明,后面的将会覆盖前面的。
例如
foo(); // 1 var foo; function foo(){ console.log(1); } foo = function(){ console.log(2); }
将被理解为
function foo(){ console.log(1); } foo(); // 1 foo = function(){ console.log(2); }
参考文章:
https://blog.csdn.net/qq_36784628/article/details/80966826
https://www.cnblogs.com/diyichen/p/11183873.html