作用域
作用域的定义:所谓作用域就是一个变量可以使用的范围
作用域又分多种
全局作用域
函数作用域
块级作用域(ES6新增)
js中首先有一个最外层的作用域,称为全局作用域
js中可以可以通过函数来创建一个独立的作用域,称为函数作用域,函数可以嵌套,所以作用域也可以嵌套
自由变量
自由变量的概念:当前作用域没有没有定义的变量
- 一个变量再当前作用域没有定义,但被使用了
- 向上级作用域一层一层的一次寻找,直至找到为止
- 如果全局作用域都没有找到,则会报错
- ab是自由变量
var a = 100
function fn1(){
var b = 200
function fn2(){
var c = 300
console.log(a)
console.log(b)
console.log(c)
}
fn2()
}
fn1()
作用域链
自由变量向上级一层一层的找,直到找到为止,一直找到全局作用域,就形成了作用域链
变量提升
变量提升 创建阶段 var a = “undefined”
function 声明并赋值
1.变量提升
在创建阶段:js 找到 var 和 function
如果是var 的话 给其声明 但未赋值 在执行阶段才为其赋值
如果是function 那么会进行声明赋值
2.变量对象: 在js当中 所有的变量都被保存到变量对象中
varirable(变量) Object =vo 变量对象
环境分为:全局环境的变量 也可能是 函数内的变量