我是靠谱客的博主 真实毛豆,最近开发中收集的这篇文章主要介绍ES6的Const Let Var的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.var 存在变量声明提升,赋值不会提升, 而let 与const不存在变量提升

2.var 定义的变量可以声明很多次,而let. const定义的变量只能声明一次

3.var.let声明的变量可以再次赋值,而const声明的变量不能再次赋值

4.var声明的变量没有自身的作用域,而let、const声明的变量有自身的作用域(块级作用域

 5. 利用var定义的变量,会自动挂载到window,但是let和const不会

 6.var定义的变量会有提升函数也有提升(最高,比var定义变量还高。),let和const 存在暂时性死区问题 

console.log(a);//undefined  不会报错  因为var 有变量提升

var a=1;

上面的等价于 var a; console.log(a) ;a=1;

但如果是单独console.log(a); 会报错 a未定义
console.log(a);//会报错、未定义  因为let没有变量提升 需要先申明在赋值

let a=1;

7.let const let定义变量    const定义常量

总结:var定义的变量 声明存在提升

console.log(a);
var a=123 ; 
console.log(a);

等价于=> 


var a;
console.log(a); //a声明提升 赋值未提升 ,所以为undefined  
a=123;  
console.log(a); //a重新赋值,值为123

 声明函数存在变量提升,优先级大于var 关键字声明。且同名函数后的声明不会覆盖,但会被变量赋值后覆盖。

console.log(a);
var a=123 ; 
console.log(a);
function a(){};

等价于=> 

var a=function(){};
var a;  //此时a 是同名声明,不会覆盖a,a的值为[function:a]
console.log(a); //[function:a]
a=123;  //此时a变量重新赋值,会被覆盖,此时a的值为123
console.log(a);//123

 练习题:



 console.log(bar);  // f bar() { console.log(123) }
 console.log(bar()); // undefined
 var bar = 456;
 function bar() {
     console.log(123); // 123
 }
 console.log(bar); // 456
 bar = 789;
 console.log(bar); // 789
 console.log(bar()) // bar is not a function

//等同于
var bar=function () {
    console.log(123); 
}
var bar;
console.log(bar);  //bar是一个函数, 后面var bar只声明 不复制是不会覆盖bar 所以bar还是function
console.log(bar()); //执行bar里的console 
bar = 456;
console.log(bar);
bar = 789;
console.log(bar);
//console.log(bar());  //[typeError]:bar is not a function


// js执行结果
// [function:bar] { console.log(123) }
// 123  // 执行bar()里的console.log
// undefined // bar()的返回值,如果函数没有返回值,默认为:undefined  
// 456
// 789
// [typeError]:bar is not a function


 函数提升
    javascript中不仅仅是变量声明有提升的现象,函数的声明也是一样;具名函数的声明有两种方式:

    1. 函数声明式    2. 函数字面量式(没有提升)

//函数声明式
function bar () {}
//函数字面量式 
var foo = function () {}


函数字面量式的声明合变量提升的结果是一样的,函数只是一个具体的值;

但是函数声明式的提升现象和变量提升略有不同

console.log(bar());
function bar () {
  console.log(1);
}

执行顺序相当于:

function bar () {
  console.log(1);
}
console.log(bar());


结果
1
undefined  应为执行一个函数没有返回值 默认返回 undefined


函数提升是整个代码块提升到它所在的作用域的最开始执行

思考下面的问题(看明白函数声明式提升下面的问题大概可以理解为什么输出1而不是2了吧):

foo(); //1
 
var foo;
 
function foo () {
    console.log(1);
}
 
foo = function () {
    console.log(2);
}

最后

以上就是真实毛豆为你收集整理的ES6的Const Let Var的区别的全部内容,希望文章能够帮你解决ES6的Const Let Var的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部