js中let和var的区别

☆樱花仙子☆ 提交于 2019-11-27 01:33:54

ES6之前使用var声明变量

在ES6之前,JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

例如:

{
	var i = 1;
}
console.log(i);														//1

ES6新增let,可以声明块级作用域的变量

例如:

{
	let i = 1;
}
console.log(i);														//报错: i is not defined

let配合for循环的独特应用

JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。

function a (){
    let list = [];
    for (let i = 0; i < 10; i++) {
        list[i] = function log(){
            console.log(i);
        }
    }
    return list;
}

let list = a();
for(let j = 0; j < list.length; j++){
    list[j]();
}

//输出结果: 0,1,2,3,4,5,6,7,8,9

如果使用var声明的话,变量会被提升为全局变量:

function a (){
    let list = [];
    for (var i = 0; i < 10; i++) {
        list[i] = function log(){
            console.log(i);
        }
    }
    return list;
}

let list = a();
for(let j = 0; j < list.length; j++){
    list[j]();
}

//输出结果: 10,10,10,10,10,10,10,10,10,10
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!