JavaScript作用域链特性----闭包

首先:

  了解闭包,必须要清楚  JavaScript 的特性 -----> 作用域 、作用域链、执行上下文  。

  闭包的构成。

  闭包性能考量。 

 

 

官方对于闭包的定义:

闭包 是指  有权访问另外一个函数作用域中的变量的函数 

关键在于下面两点:

  • 是一个函数
  • 能访问另外一个函数作用域中的变量

 

另外的说法:

  闭包可以延长(函数作用域下)变量的生命周期。   -------   不可释放的引用    

 

  JS闭包是JavaScript函数对JS特性作用域的一种应用!!!   --------让其存在一种引用关系,使之不被垃圾回收机制回收。

  延伸👇

  因为函数内部定义的变量是局部变量,不能被外部(作用域链---外到内)的变量所访问,而函数内部的变量却可以访问函数外部的变量(作用域链---内到外)。

  通过函数return   ---------    避免全局变量的污染,保护私密数据。

 

闭包性能考量:

  闭包对于浏览器---处理速度以及内存消耗方面对脚本性能具有负面影响!!!

 

 

补充:

  作用域:

    简单粗暴的解释:变量的可用范围。

  Global Object(全局对象)---------存在于全局执行上下文(全局环境)。

  [[scope]]  指向的是   当前   作用域对象。

 

  作用域链:

  词法环境:

  

 

------执行环境栈    活动对象AO...

 

  总结分析:

  闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

posted @ 2020-04-17 15:07  Action_swt  阅读(106)  评论(0编辑  收藏  举报