javascript中var,let,const的区别用法

查找了资料和参考了一些大神的总结,我也总结一下记个笔记。

1.var

var相比let就是管的比较宽,他的值可以被内部修改。

function tests(){
    var n = 1;
    if (true) {
        var n = 2;
    }
    console.log(n); //值被函数内部修改,输出2
}
tests();


if(1){
    var a = 100;
}
console.log( a );//输出100,因为var没有块级作用域,这里a会成为全局变量

2.let

let是es6中新增定义,带有块级作用域,只会在所定义块生效。

function test(){
    let n = 1;
    if (true) {
        let n = 2;
    }
    console.log(n); //值不会被修改,输出1
}
test();


if(1){
    let b = 100;
}
console.log( b );//错误 ReferenceError: b is not defined
//因为let的块级作用域,所以b变量只存在与if内部

let 和 const 存在“变量死区”,这点也是和 var 不同的地方。

3.const

const用来定义常量(可以是字符串,数组,函数,对象等),并且初始值不可为空,但他并不是不可更改的。举个栗子:

const c;//会产生报错.
const d = 1;//正确

const arr = [1, 2];
arr.push(1);//正确 [1, 2, 1]
arr[0] = 3;//正确 [3, 2, 1]

arr = [];//错误TypeError: invalid assignment to const `arr'

可见,如果有需要,可以改变const里所存储的值,但它的指向空间是无法操作的。

4.有趣的面试例子

面试的时候很经常遇到一个例子:

for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}
//这个例子执行完输出什么结果?

//答案是 5,5,5,5,5

//如果想要输出0,1,2,3,4改怎么实现?
//其中一种方案就是把var换成let就可以了。let的块级作用域在这里就体现出来了。

for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

--------------------------------------------------------------笔记结束了!!!

你可能感兴趣的:(javascript中var,let,const的区别用法)