使用let/const来取代var声明方式

块(block)
  • 大括号{}包含的整个区域为一个块

块级作用域:
  • 变量只在声明它的代码块以及子块中有效。
  • const和let声明的变量都是块级作用域
  • for/while/if和子块是一个整体。

函数作用域:
  • 变量在申明后再整个函数中有效。
  • var是函数作用域
          


变量 hosting:
  • 允许先使用后声明就是因为作用域提升。(但是该值是undefined。可以使用是说不会抛异常)
  • you can refer to a variable declared later, without getting an exception. This concept is known as hoisting
  • 提升的意思:是说该变量被提升到函数的最上方

function hosting:
  • 只有函数声明形式的函数才能提升。(函数表达式不行)



temporal dead zone:临时性死区。(let不会存在此问题。let禁止未声明直接使用以及多次声明)
  • var类型的变量,未声明直接使用不会抛异常,被认为是undefined的值。
  • var的变量在定义之前的区域被称为“临时性死区”
    

全局变量:(window下的变量,作用域为全局)
  • 非严格模式下,未通过var声明的变量,都是全局变量(即便是定义在函数体类的)
    • 这种各类型的全局变量是很危险的。



作用域链:
其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链



3.scope:块级作用域和函数作用域

2019-02-16 21:56:50 0 43
这里是评论

相关推荐