作用域,闭包,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)  变量的赋值(=)

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

范围: 在一段<script>或一段函数中,执行上下文的过程中。

全局: 在一段<script>中,变量定义,函数声明

函数: 在函数中,变量定义,函数声明,this, argument

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容