美文网首页
块级作用域

块级作用域

作者: 咖A喱 | 来源:发表于2018-11-23 16:20 被阅读0次
  • 首先了解环境的概念:决定变量或函数有权访问的其他数据。
  • 作用域决定了变量和函数的可见性和生命周期。

  • 块级作用域: 在javascript中,函数里面定义的变量,可以在函数里面被访问,但在函数外无法访问。而由花括号封闭的代码块都有自己的作用域,因而支持根据条件来定义变量,变量在执行完毕后会被销毁。

ES5中没有块级作用域

影响
  1. if内层变量可能覆盖外层变量:

var tmp = new Date();
 
function f(){
  console.log(tmp);
  if(false){
    var tmp = "hello";
  }
}
 
f(); // undefined
  • 以上代码执行后,输出函数f的结果为undefined,因为if会将增加的变量添加到当前执行环境中(即全局环境中)覆盖外层的变量---”变量提升“
  1. for循环的变量会泄露成全局变量
var s = "hello";
for(var i=0;i<s.length;i++){
  console.log(s[i]);
}
 
console.log(i); // 5
  • for循环中的i本来在执行后被销毁,但是没有消失反而成了全局变量

ES6中引入let和const命名后有了块级作用域

  • ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
    更多详情

总结

  1. var命令下没有块级作用域
  • 使用var会形成一个未初始化的undefined的值
  • if函数会出现“变量提升”的现象
  • for循环定义的变量会泄露成全局变量
  1. ES6中的let和const命令有块级作用域
  • let和const适合在for循环使用,只在循环体内有效,体外会报错

for循环的特别:
设置循环变量的部分是父作用域,循环体内是子作用域

  • 不存在“变量提升”
  • 会出现暂时性死区(TDZ):只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。规范编程人员先进行变量的声明后才可进行使用。
  • 不允许重复声明,但内层作用域可以定义外层作用域的同名变量
  • 允许块级作用域任意嵌套
  • 不再需要立即执行函数表达式(IIFE)

针对ES6 的浏览器有效:

  • 允许在块级作用域内声明函数。
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
  • 同时,函数声明还会提升到所在的块级作用域的头部。

相关文章

  • 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/jqejqqtx.html