ECMAScript求索 · let 关键字

ES6中新增加了let关键字来定义变量,它的用法与var相似,同时,ES6也对块级作用域进行了完善,这使得let与var在使用上出现了不同的特性。下面将会一一分析学习。

0x01.块级作用域

ES6规定了一组大括号{}之前的区域为块级作用域,使用let关键字定义的变量作用域受块级作用域限制,而使用var关键字定义的变量则不受块级作用域影响,下面代码段中,在大括号外部依旧可以访问var定义的a变量而无法访问let定义的b变量。

{
    var a = 1;
    let b = 2;
}
console.log(a); // 1
console.log(b); // b is not defined

0x02.let关键字不会变量提升

使用let定义的变量在解释器执行的过程中不会进行变量提升,从而不能在变量定义之前使用,下面代码段中var定义的变量a由于解释器在执行过程中进行了变量提升从而不会报错,而使用let定义的变量b不会被变量提升,所以解释器在执行的过程中给出了b is not defined的错误信息。

console.log(a); // undefined
console.log(b); // Error: b is not defined

var a = 1;
let b = 2;

上述代码变量提升后的真实逻辑如下面代码段所示,更多变量提升知识,请点击查看

// 变量提升将var定义的变量置为当前作用域最前端
var a;

console.log(a); // 此时a已经被声明,但没有具体值。
console.log(b); // 此时b没有被声明。

a = 1;
let b = 2;

0x03.不可以重复声明

使用var定义的变量在重复声明时解释器不会给出错误信息,后赋给变量的值会替换之前变量的值。

var a = 1;
var a = 'test';

console.log(a); // 'test'

var b = 2;
var b;

console.log(b); // 2

let关键字不允许重复声明同一变量,解释器会给出错误信息:Uncaught SyntaxError:Identifier 'variable' has already been declared,告知用户出现语法错误,变量已经被定义。

let a = 1;
let a = 'test'; // Uncaught SyntaxError: Identifier 'a' has already been declared

console.log(a);

0x04.不会给window对象增加属性

在全局作用域下,使用var关键字和function关键定义的变量和方法将会被作为全局对象window的属性,而使用let关键字定义的变量将不会作为全局对象window的属性,下面代码段中可以看出var定义的a变量和function定义的getA方法添加到了window的属性中,而let定义的变量b则没有被添加。

var a = 123;

function getA() {
    console.log(a);
}

let b = 321;

console.log(window.a); // 123

console.log(window.getA); // function getA(){ console.log(a); }

console.log(window.b); // undefined

 还可以使用in关键字来测试结论:

var a = 123;

function getA() {
    console.log(a);
}

let b = 321;

console.log('a' in window); // true

console.log('getA' in window); // true

console.log('b' in window); // false

0x05.总结

以上就是在学习ECMAScript的过程中所了解到的let的初级的知识,有待补充和完善,如在叙述中存在问题,还请不吝赐教,指出问题所在。

0x06.参考资料

let 和 const 命令 -《ECMAScript 6 入门》——阮一峰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值