<导航

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

 

posted @ 2020-07-13 20:59  字节悦动  阅读(1021)  评论(0编辑  收藏  举报