let,const

作者: 佛系跳伞运动员 | 来源:发表于2018-03-31 20:02 被阅读3次

let const

let

  • 与var的区别
    • 块级作用域
    • 不存在变量提升(会导致暂时性死区)
    • 不允许重复声明

1.块级作用域

  • es5是函数作用域var变量会导致块级作用域外泄:
// 块级作用域外泄
var a = {test: '123', test1: '345'};
for (var item in a) {
    console.log(item);
}
console.log(item);//可以读出item
  • es6中let关键字解决块级作用域外泄
// 解决方法ES6中的let关键字
var a = {test: '123', test1: '345'};
for (let item in a) {
    console.log(item);
}
console.log(item);//块级作用域外不可以读出item

// 事实上babel会将上面语句转换为:
var a = {test: '123', test1: '345'};
for (var _item in a) {
    console.log(_item);
}
console.log(item);

2.不存在变量提升

  • es5中的变量提升
console.log(foo); // 输出undefined
var foo = 2;
// 相当于
var foo;
console.log(foo); // 输出undefined
foo = 2;
  • es6中let不存在变量提升
console.log(bar); // 报错ReferenceError
let bar = 2;
  • 块级作用域和变量不提升导致的暂时性死区
//块级作用域与let变量声明之间的这一块就是暂时性死区
var tmp = 123;
if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

3.不允许重复声明

  • es5中同一作用域下声明两个一样的变量会后者覆盖
var item = 1;
var item = 2;
console.log(item);//2
  • let不允许在相同作用域内,重复声明同一个变量。
// 报错
var item = 1;
let item = 2;
console.log(item);

const

  • const声明一个只读的常量。一旦声明,常量的值就不能改变。

    • const的作用域与let命令相同:只在声明所在的块级作用域内有效。
    • const命令声明的常量也是不提升,同样存在暂时性死区
    • const声明的常量,也与let一样不可重复声明。
  • const的本质

    • const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
    const foo = {}; 
    // 为 foo 添加一个属性,可以成功
    foo.prop = 123;
    foo.prop // 123
    // 将 foo 指向另一个对象,就会报错
    foo = {}; // TypeError: "foo" is read-only
    

let和const变量的声明不在是在全局变量上

var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1

let b = 1;
window.b // undefined

相关文章

  • ES6

    let const let const 没有变量提升let 块级作用域const 常量 模板语言, restfu

  • 工作中常用的 ES6 语法

    变量声明 let 和const 不用var, 用const声明只读变量,let声明变量。let和const都是块级...

  • let和const

    新的赋值语句let和const let和const命令

  • 关于ES6以及ES6常用的方法

    1、变量声明let和const let表示变量、const表示常量。let和const都是块级作用域。 2、模板字...

  • ES6简单总结篇

    一、let const 特性: 1、let const 声明的变量只在他所在的代码块内有效 2、let const...

  • ES6需要记忆理解的地方

    let和const命令 1、let和const均无变量提升。2、let变量指向的地址可变,const指向的地址不可...

  • ES6这些就够了

    1.变量声明const和let let表示变量、const表示常量。let和const都是块级作用域 2.模板字符...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • 【JS】从ECMA学习let、const、var变量声明与声明提

    let、const、var是JS中的声明关键字 let和const 我们熟知的let和const的特性,常见的就有...

  • Android菜鸟学习js笔记 一

    一、var,const,let区别? var 变量,const 常量,let块级变量。

网友评论

    本文标题:let,const

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