欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript之闭包

程序员文章站 2022-04-19 11:01:58
...
1.概念:其局部变量在函数调用结束之后继续存在。
2.前提:嵌套函数
function f(){
  function fn1(){};
}

3.分析理解嵌套函数:
function f(){
  function g(){
    print 'g is a function'
  };
  g();//生成Call-g对象
}
f();//javascript中对函数的调用会隐式生成Call对象,此处生成Call-f对象,Call-f的属性包括f和g,此对象在函数调用结束后被销毁。Call-f对象被销毁的时候,相关的属性也被销毁。
==>g is a function


但是。。。。

function f(){
  var n = 123;
  function g(){
    console.log('n=' + n);
  };
  return g;
}
var fn1 = f();
fn1();

函数f在调用的时候生成的Call-f对象的属性g所引用的Function被fn1引用,只要fn1存在,被fn1引用的Function就存在,Call-f对象也就存在。这就导致了即便是离开了f,还是可以引用f中的变量n。<--- 此为闭包
相关标签: javascript 闭包