美文网首页
let 特性

let 特性

作者: LingJJ1100的笔记 | 来源:发表于2017-11-07 22:53 被阅读0次

说明:除了提供var的变量声明方法,
还提供了将变量绑定到所有的任意作用域中(通常是{..}内部)
换句话说:let,为其声明的变量隐式劫持了所有的块作用域

块作用域

ES5中:只有全局作用域和函数作用域
说明:花括号{..}包括的代码
但是:for while if中并没有块级作用域
解决:使用let 声明 或 使用闭包包裹

for(var i = 0; i < 5; i++){
    var a = 10;
    let b = 2333; 
}
// 貌似i和a 都定义在for的作用域内
// 实质是绑定到全局变量中
console.log(i, a) // 6 10
console.log(b) // ReferenceError: err not found

提升 编辑器的预编译

var 变量:声明会被提升,赋值则不会
let 变量:不会被提升
函数:会被提升
函数优先:函数相对于变量优先提升

console.log(a) // undefined
var a = 2; //a以被声明并赋值undefined 但未赋值2

b() // 2 
function b(){ console.log(1) }; // 被提升
function b(){ console.log(2) }; // 被提升并覆盖上个
var b  = function(){console.log(3)}; // 有函数被忽略

c() // TypeError
// c变量声明被提升,但未赋值。 undefined不能运算操作
var c = function(){console.log(1)}

let 和 for

for 和 var:for本省没有块作用域 需要使用闭包来来保存每一次的循环变量。
(循环变量)和{循环体}是父子作用域关系,在循环体内重复声明i不会影循环变量
for 每一次迭代:获取上一次循环变量,并从新声明新
当for使用let:由于每一次都是新的let声明,所以都是新的块作用域

// 用let 声明 i 让 i 成为块级作用域形成变量,
// 每一次的 i 只对当时的块作用域内有效。
for(let i = 0; i < 3; i++){
    setTimeout(()=>{ 
        console.log(i) // 0 1 2
    },1000)
}

for(let i = 0; i < 3; i++){
    let i = 'abc'; //声明 i 但不会覆盖 循环变量里面的i
    setTimeout(()=>{ 
        console.log(i) // 'abc' 'abc' 'abc'
    },1000)
}

暂时性死区 不能重复声明

说明:只要块级作用域内存在let变量,该声明的变量名不受外部的同名变量影响
使用:在变量正式被声明前,不能使用

let a = 10;
function foo(){
    //  a 被绑定,且let不会被提升
    console.log(a);// ReferenceError
    let a = 20; //let声明 的a变量,以上区域为死区
    let a = 30; // SyntaxError 重复声明报错
};
foo();

相关文章

  • let 特性

    说明:除了提供var的变量声明方法,还提供了将变量绑定到所有的任意作用域中(通常是{..}内部)换句话说:let,...

  • let语法特性

    形成块级作用域 这里循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。输出3次abc,表明函数内部变量...

  • ES6 学习总结

    一、let、const 的用途和 var 相似,都是用来声明变量,但各自特性并不相同。 let 的特性: 1. 只...

  • let && const

    如需转载请注明来源 关键词:let , const let 介绍一下let的特性: let不存在变量提升:它是按照...

  • ES6新特性简单学习记录

    学习文章转自:ES6简单特性学习记录 变量定义新方式:let/const let特性 : 块级作用域(一对{}包括...

  • ES6简单总结篇

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

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

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

  • 认识 ES2015 (一) —— 需要知道的几个特性

    ES2015 特性 1、属性和方法的简写 2、计算属性 3、let和const- let是更完美的var- let...

  • ES6学习笔记 新特性

    es6出现的新特性:循环for(let i=0;i<10;i++),出现for(let str for arr),...

  • let命令

    与var命令的对比,以及let的一些特性1.let声明的变量只能在let命令所在代码区块中生效 2.let不存在变...

网友评论

      本文标题:let 特性

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