美文网首页
ES6-作用域

ES6-作用域

作者: zhenghongmo | 来源:发表于2020-03-13 16:37 被阅读0次

块级作用域

  • 通过var声明的变量没有块级作用域,var会变量提升,只有函数才能包住var
    • 例如:
var a = 1;
{
    var a = 2
}
console.log(a)//2
  • let和const有块级作用域
    • 例如:
let a = 1;
{
    let a = 2;
}
console.log(a)//1
const a = 1;
{
    const a = 2;
}
console.log(a)//1

注意:作用域里的常量声明 const a = 2 并不会抛出SyntaxError: Identifier 'a' has already been declared这样的语法错误,因为这是一个新的作用域。

let

  • 特点
    • let的作用域在最近的{}之间,let不会变量提升
    • 如果在let a 之前使用a,那么报错
    • 如果重复let a,那么报错。
  • let的暂存死区
    • 在同一个作用域中,用let重复定义一个变量,将引起TypeError
if(x){
    let foo;
    let foo; // TypeError thrown.
}
  • 在 ECMAScript 2015(ES6) 中,let 绑定不受变量提升的约束,这意味着 let 声明不会被提升到当前执行上下文的顶部,在块中的变量初始化之前,引用它将会导致 ReferenceError(而使用 var 声明变量则恰恰相反,该变量的值是 undefined )。这个变量处于从块开始到 let 初始化处理的”暂存死区“之中。
function fn(){
    console.log(a);  //undefined
    console.log(b); //ReferenceError: b is not defined
    var a = 1;
    let b = 2;
}

const

  • 特点

    • const的作用域在最近的{}之间
    • 如果在const a 之前使用a,那么报错
    • 如果重复const a,那么报错
    • const只有一次赋值机会,声明变量时必须赋值,赋值后将无法改变。
  • 注意

const a = 7;

//(1)
a = 20; //再次赋值会报错

//(2)
const a = 20; // 尝试再次声明会报错
var a =20;
let a =20;//不管用什么声明都会报错

//(3)
if(a===7){
    let a =20 //这个a只在{}这个块级作用域中
    console.log(a) //20
}

const obj = {name: 'momo'}
obj = {NAME:'MOMO'} //报错,不可以再次赋值
obj.name = 'tom' //成功!!

<font color ="red">const定义变量之后,我们不可以修改stack上的内容,但是可以修改heap上的内容</font>

相关文章

  • 高频前端面试题汇总之JavaScript篇-ES6

    ES6-基础 1.let、const、var的区别 (1)块级作用域 块作用域由 { }包括,let和const具...

  • es6-块级作用域绑定

    title: es6-块级作用域绑定date: 2018-01-24 21:32:33tags: es6 前言 花...

  • ES6-作用域

    块级作用域 通过var声明的变量没有块级作用域,var会变量提升,只有函数才能包住var例如: let和const...

  • ES6->块级作用域

    块级作用域 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

网友评论

      本文标题:ES6-作用域

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