javaScript--浅谈闭包

Posted 赵皖华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript--浅谈闭包相关的知识,希望对你有一定的参考价值。

作用域就不说了,先来理解一个概念:作用域链

 

当定义一个函数时,它实际上保存一个作用域链。

当调用这个函数时,它创建一个新的对象来存储他的局部变量,并将这个对象添加至保存的那个作用域链上,同时创建一个新的更长的表示函数调用作用域的‘链’。

下面来举个栗子:

 var scope = ‘G scope‘;
function checkscope(){
          var scope = ‘L Scope‘;
          function f(){
                      return scope;
                         }
          return f();
 }
checkscope();  //   ‘L Scope’



var scope = ‘G scope‘;
function checkscope(){
          var scope = ‘L Scope‘;
          function f(){
                      return scope;
                         }
          return f;
 }
checkscope()(); //  ‘L Scope‘
简单来说, 定义  f  时候生成 的 作用域链保存了当前作用域的所有对象,包括 var scope = ‘L Scope’;  这个局部变量。
 
函数定义时的作用域链到函数执行时依然有效。这句话就是闭包的精髓了。

 





















以上是关于javaScript--浅谈闭包的主要内容,如果未能解决你的问题,请参考以下文章

浅谈JavaScript的闭包

浅谈JavaScript闭包this指针作用域

浅谈JavaScript的函数表达式(闭包)

浅谈JavaScript闭包

浅谈JavaScript匿名函数与闭包

javaScript--浅谈闭包