作用域,闭包,this,变量提升

要理解作用域链,需要先知道自由变量,

自由变量: 在当前作用域内没有定义的变量就是自由变量

作用域链: 函数内有多个自由变量,在该函数内没有找到该函数表达式,就需要往父级作用域去找,如果父级没有,就一层层的往上找,就这样多层嵌套就是作用域链。

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)  变量的赋值(=)

取值(使用变量名等效于使用变量中的值)

范围: 在一段

你可能感兴趣的:(作用域,闭包,this,变量提升)