要理解作用域链,需要先知道自由变量,
自由变量: 在当前作用域内没有定义的变量就是自由变量
作用域链: 函数内有多个自由变量,在该函数内没有找到该函数表达式,就需要往父级作用域去找,如果父级没有,就一层层的往上找,就这样多层嵌套就是作用域链。
var a = 100
function F1() {
var b = 200
function F2() {
var c = 300
console.log(a) //a是自由变量
console.log(b) // b是自由变量
console.log(c)
}
F2()
}
F1()
闭包: 函数作为参数传递, 函数作为返回值, 在实际开发中,闭包用封装函数,收敛权限。
function F1() {
var a = 100
//返回一个函数(函数作为返回值)
return function() {
console.log(a)
}
//f1得到一个函数
var f1 = F1()
var a = 200
f1()//得到的值是100
var f1 = F1()
function F2(fn){
var a = 100
fn()
}
F2(f1)//得到的值100
this的使用场景:
1,在构造函数中使用
2,在对象韩函数中执行
3,在普通函数中执行(this指window)
4, call, bind, apply
注: this只有在执行的时候能确认,在定义时不能确认。
变量提升的理解
变量的声明(var) 变量的赋值(=)
取值(使用变量名等效于使用变量中的值)
范围: 在一段<script>或一段函数中,执行上下文的过程中。
全局: 在一段<script>中,变量定义,函数声明
函数: 在函数中,变量定义,函数声明,this, argument