作用域
作用域指变量能够被访问
到的范围,也称变量作用域
全局作用域,浏览器(window), Node(global)
函数作用域 function内部
块级作用域(es6新增,之前没有块级作用域的概念,let、const声明的变量)
作用域链
由于作用域层级的关系,导致出现作用域链
一般(全局作用域 包含(函数作用域 -》 包含(函数作用域和块级作用域) 和 块级作用域))
function outer(){ |
变量提升
上面说到 es6 之前没有没有块级作用域,取而代之的是函数作用域(function-scope)。
函数作用域
在函数内声明的所有变量在函数体内始终是可见的,因此,变量在声明之前甚至已经可用。
console.log(gg); // undefinde |
变量提升
上面的现象,是因为变量提升了, 采用 var 声明的会提升到当前作用域的顶部
上面代码相当于
var gg; |
函数提升
函数其实可以看做特殊的变量,而函数有
function
关键字和表达式声明两种方式
function
方式
function
方式时,函数优先提升
var a = 'foo'; |
函数表达式方式
函数表达式与普通变量一致(即函数体是不会提升的)
var a = "kk" |