ES6笔记——let

June 25,2020

ES6中一共有6种声明变量的方法:let const class import var function

主要看一下let

let声明的变量只在let声明的代码块内有效

// var 声明
var a = []
for(var i = 0;i<10;i++){
    a[i] = function(){
        console.log(i)
    }
}
a[6]() // 10

// let 声明
var b = []
for(let i = 0;i<10;i++){
    b[i] = function(){
        console.log(i)
    }
}
b[6]() // 6

不存在变量提升

这个很容易理解,不详细说了

暂时性死区

只要块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不在受外部影响

let name = 'outer'
function showName(){
    console.log(name)
    let name = 'inner'
}
name = 'updateOuter'
showName() //ReferenceError: Cannot access 'name' before initialization

var name1 = 'outer'
function showName1(){
    console.log(name1)
    var name1 = 'inner'
}
name1 = 'updateOuter'
showName1() // undefined

全局对象的属性有所改变

全局对象的属性,ES5中全局对象就是最顶层的对象,在浏览器环境指的是window对象,在Node.js环境指的是glabal对象。ES6规定,var,function命令声明的全局变量依旧是全局对象的属性;let,const,class命令声明的全局变量不属于全局对象的属性。

var c = 1
console.log(this.c) // 1

let d = 1
console.log(this.d) // undefined


let len = 10;
function fn() {
    console.info(this.len) 
}
fn(); // undefined
let person = {
    len: 5,
    say: function() {
        fn(); // undefined 这里还没弄清楚,等弄清楚了再解释
        arguments[0](); // undefined 这里还没弄清楚,等弄清楚了再解释
    }
}
person.say(fn);

上一篇 下一篇
Comments
Write a Comment