美文网首页
块级作用域

块级作用域

作者: 文千会 | 来源:发表于2017-11-28 00:00 被阅读0次

ES5只有全局作用域和函数作用域

为什么要有块级作用域

  • 防止内层变量覆盖外层变量
    var tmp=new Date();
    function f(){
    console.log(tmp);
    if(false){
    var tmp='hello world'
    }
    }
    f()// undefined 没有块级作用域,然后通过var声明变量导致变量提升,覆盖了外层变量

  • 防止循环变量泄露为全局变量
    都知道for循环 var i=0 相当于在全局变量定义i=0,在循环结束后,并未消失,泄露在全局变量中。

ES6的块级作用域

let实际上为JS新增了块级作用域
function f(){
let n=5;
if true(){let n=6}
console.log(n) //5
}
es6允许块级作用域任意嵌套
{
{
{
let x=2;
}
console.log(x) //报错
}
}
块级作用域使得立即执行匿名函数(IIFE)不再必要
你只需要在想执行的地方:
{
let x=....
xxxxx
}
块级作用域与函数声明
由于现在环境不同,不建议在块级作用域中声明函数,若确实需要请用表达式

  • 允许块级作用域内声明函数
  • 规定是在块级作用域中,函数声明的语句类似let,块级作用域之外不可引用,但为了兼顾ES5,目前函数声明类似var
  • 函数声明会提升到全局作用域/函数作用域头部,同时也会提升到所在块级作用域头部
    do表达式:块级作用域本无返回值,但是加一个do,使其变为do表达式,便可以得到返回值:
    let x={
    let t=f();
    t*t+1;
    }

相关文章

  • js 作用域

    js 作用域主要有:全局作用域和局部作用域,es5之前没有块级作用域,es6有了块级作用域 何为块级作用域,块级作...

  • let、const和var的区别(个人笔记)

    1. 区别 (1)块级作用域块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作...

  • let,var和const

    var没有块级作用域,只有方法作用域常见的块级作用域,if(){}。for(){}。

  • 第七章 块级作用域、私有变量

    模仿块级作用域 私有变量  js没有块级作用域,只有全局作用域和局部作用域(函数作用域),块级作用域是指某一部分代...

  • 你真的懂let和const吗?

    块级作用域 在ES6之前我们脑海里应该只存在全局作用域和函数级作用域,没有块级作用域。那么为什么要引入块级作用域呢...

  • js高级知识点(第五天)

    所用域 什么是作用域 变量起作用的范围 什么是块级作用域,使用代码块限定的作用域是块级作用域(let声明的变量是块...

  • ES6->块级作用域

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

  • es6新增特性

    一、变量的改变 let 用来声明变量(块级作用域) const 用来表示常量(块级作用域) 块级作用域 就是在{}...

  • vue.js let与for的用法

    (一)块级作用域1.let声明的变量拥有块级作用域,块级作用域是一对大括号2.块级作用域可以直接写一对大括号,以后...

  • js声明提升

    块级作用域块级作用域是指花括号内的每一段代码都具有各自的作用域,而javascript没有块级作用域。javasc...

网友评论

      本文标题:块级作用域

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