学习JS闭包

来源:互联网 发布:美国医学PHD 知乎 编辑:程序博客网 时间:2024/05/20 12:46

1.js中变量的作用域有两种:全局变量和局部变量;
2.全局变量在js的任何地方都可以访问

var n=100;
function f(){
document.write(n);
}
f(); //100

3.局部变量在函数外部无法进行访问

function f(){
var n=100;
}
document.write(f()); //报错
在函数内部声明变量要用var ,否则为全局变量

4.怎样能够在外部读取到函数内部的局部变量??

利用闭包:1.什么是闭包?有权访问另一个函数作用域中的变量(不是全局函数,所以不会被污染,但又能始终保存在内存中,可重用)

5.简单闭包例子

function factory(){
var n=1;
return function(){
return n++;
}
}
var icbc=factory();
console.log(icbc());
console.log(icbc());
//调用f2,也可写为factory()()

  • 解析代码:在ESC(环境执行栈)中先有一个全局EC引用一个window对象存有全局变量icbc和factory()
  • 执行函数factory()时,向ESC中压入函数对象,函数对象的活动对象中存有变量n和函数
  • 这里写图片描述从图片可以看出icbc引用函数中的内部函数,内部函数的作用域链指向factory的活动对象,活动对象中的变量n被全局变量icbc调用,形成三角关系

6.闭包的缺点

1.闭包会将函数中的变量保存在内存中,内存消耗大,导致内存泄漏
解决:退出函数后释放函数(null)
2.会改变父函数内部变量的值

0 0
原创粉丝点击