美文网首页技术雷达编程笔记
ES6 新特性之 let, const : JavaScript

ES6 新特性之 let, const : JavaScript

作者: 光剑书架上的书 | 来源:发表于2018-09-07 23:04 被阅读18次

let : 块级作用域

我们知道,JavaScript是没有块级作用域的,如果在块内使用var声明一个变量,它在代码块外面仍旧是可见的:

if (true) {
     var foo = 3;
}
console.log(foo);    // 3

for (var i = 0; i < 9; i++) {
     var j = i;
}
console.log(i);      // 9
console.log(j);      // 8

可以看到,在上面代码中,我们虽然是在块内声明的变量,但代码块执行完毕后,依然可以访问到相应的变量,说明JavaScript中没有块级作用域的。

而ES6规范给开发者带来了块级作用域(终于跟 C,Java,Kotlin 等语言保持一致了),如果把var换成let命令,我们就可以获得一个块级变量:

if (true) {
     let foo = 3;
}
console.log(foo);   // Uncaught ReferenceError

for (let i = 0; i < 9; i++) {
     let j = i;
}
console.log(i);     // Uncaught ReferenceError
console.log(j);     // Uncaught ReferenceError

从上面代码可以看出,块内声明的变量,块外是不可见的,如果试图引用一个块内用let声明的变量,就会引发一个异常。

let约束了变量提升, ES6中的let命令规范了变量的声明,约束了变量提升,也就是说,我们必须先声明,然后才可以使用: 永远将变量声明置于当前作用域顶部:

function nonHoistingFunc() {
    let foo = 3;
    console.log('foo:', foo); // 3
}

nonHoistingFunc();

const 变量: 引用不可变

以上let所介绍的规则均适用于const命令,不同的是,const声明的变量不能重新赋值。也就是 Java 中的 final,Kotlin 中的 val。

也是由于这个规则,const变量声明时必须初始化,不能留到以后赋值,所以下面的代码是不合法的:

const a = 3;
a = 5;   // Uncaught TypeError: Assignment to constant variable
const b; // Uncaught SyntaxError: Missing initializer in const declaration

以上就是let和const的内容,可以看出,let和const大大改进了ES5的变量机制,使得JS更严谨和规范,随着ES6支持程度的提高,我们应该开始习惯let和const的使用了。

参考资料:

http://es6.ruanyifeng.com/#docs/let

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

http://stackoverflow.com/questions/31219420/are-variables-declared-with-let-or-const-not-hoisted-in-es6

相关文章

  • JavaScript var let和const声明变量

    let和const 在JavaScript中,我们经常使用var关键字声明变量。直到ES6的发布,增加了许多新特性...

  • JavaScript var let和const声明变量

    let和const 在JavaScript中,我们经常使用var关键字声明变量。直到ES6的发布,增加了许多新特性...

  • es6新特性

    ES6 新特性 ES6 新特性 一ES6简介 二块级作用域绑定1 let声明2 const声明Constant D...

  • React全栈

    一、现代前端开发 1.1 ES6 —— 新一代的JavaScript标准 1.1.1 语法特性 const、let...

  • ES6 新特性之 let, const : JavaScript

    let : 块级作用域 我们知道,JavaScript是没有块级作用域的,如果在块内使用var声明一个变量,它在...

  • ES6新特性

    本文列举一些我们开发常用的ES6新特性, 如下: 1.块级作用域变量let,const let, const不会出...

  • 面试

    ES6常用新特性和语法。 一、变量申明 ES6有var、function、let、const、import、cla...

  • ES6、ES7常用特性

    一、ES6(ES2015)新特性 1、支持let和const在之前JS是没有块级作用域的,const与let填补了...

  • ES6新特性学习

    ES6新特性学习 学习链接:http://es6.ruanyifeng.com/ var、let和const le...

  • interview

    es6中有哪些新特性: 新的变量声明方式 let/const 我们常常使用let来声明一个值会被改变的变量,而使用...

网友评论

    本文标题:ES6 新特性之 let, const : JavaScript

    本文链接:https://www.haomeiwen.com/subject/rywhgftx.html