JavaScript闭包原理与分析
suoyuesmile opened this issue · 2 comments
suoyuesmile commented
suoyuesmile commented
- 变量作用域
var n=999;
function fn(){
alert(n);
}
fn(); //999
function fm(){
var n=999;
}
alert(n); //error
function fk(){
n=999;
}
fk();
alert(n); //999
- 从外部读取局部变量
function fa(){
var n=999;
function fb(){
alert(n);
}
return fb;
}
var result=fa();
result();
-
闭包概念
fb就是闭包,能够读取其他函数内部变量的函数
闭包是将函数内部和函数外部连接起来的一座桥梁 -
闭包用途
//用途1. 读取函数内部变量
//用途2. 使变量保持在内存中
fuction fc(){
var n=99;
nAdd=function(){n+=1}
function fd(){
alert(n);
}
return fd;
}
var result=fc();
result();
nAdd();
result();
//fc是fd的父函数,fd被赋予了一个全局变量,导致fd始终在内存中
- 运行机制理解
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()()); //My Object
suoyuesmile commented
注意:缩进为了保持所以环境一致,使用两个空格代替tab键。