Javascript闭包使用的示例分析
说到关闭,每个人都必须早点听说。下面,我有一个简单的了解。
说实话,实际上很少有手动编写闭包的场景,但是在项目中使用的第三方框架和组件或多或少都在闭包中使用。
因此,有必要了解闭包…
一、什么是壁橱
简而言之,它是一个函数,它读取其他函数的内部变量。
由于JS变量范围的特性,内部变量不能被外部访问,外部变量可以在内部找到。
两。使用场景
1。执行私人成员。
2。保护名称空间以避免对全局变量的污染。
三.缓存变量。
首先看一个封装的例子:
复制代码如下:var =函数(){()
作为内部和外部访问功能的变量范围
var;
返回{
getName:函数(){
返回的名称;
},
集名称:功能(新名称){
名称=新名称;
}
}
(});
console.log(人的名字); / /直接访问,结果如下:未定义
Console.log((人。getName)); / /结果:默认
console.log(person.setname(langjt ));
Console.log((人。getName)); / /结果:langjt
然后看看循环中常见的闭包来解决引用外部变量的问题。
复制代码代码如下:var阿里= document.getelementsbytagname(李的);
对于(var i = 0,len = ali.length;我< len;i++){
ALi {我}。onclick =函数(){
警告(i);无论哪个元素都是按鼠标单击的,这里显示的是弹出值,我和之后的打印值是一样的。
};
}
使用闭包后:
复制代码代码如下:var阿里= document.getelementsbytagname(李的);
对于(var i = 0,len = ali.length;我< len;i++){
ALi {我}。onclick =(功能(我){)
返回函数(){
警报(i);单击元素,将弹出相应的元素。
}
})(一);
}
三。注意事项
1。内存泄漏
由于闭包可以使函数中的变量存储在内存中,所以内存消耗很大,所以不能关闭闭包。否则,将导致网页性能问题。
例如:
复制代码代码如下:函数富(){
无功odiv = document.getelementbyid('j_div);
var id = odiv.id;
odiv.onclick =函数(){
/ /警报(odiv。ID);有一个圆形的参考,网页的odiv关闭后仍在记忆IE低版本。所以基本的类型,而不是对象,缓存尽可能多的。
警报(id);
};
odiv = null;
}
2。变量命名
如果内部函数的变量与外部函数的变量名相同,则内部函数不能指向外部函数同名的变量。
例如:
复制代码代码如下:函数富(数字){
返回函数(数字){
console.log(努姆);
}
}
新富(9);
(f);未定义的
事实上,上述用法,专业术语叫腐熟功能(讨好),是将函数接受多个参数接受一个参数(第一个参数的初始功能)功能,并返回剩余的参数和函数返回技术的结果,关闭自然也可以被缓存,如:
复制代码代码如下:var加法器=函数(数字){
返回函数(y){
返回值;
};
};
var =加法器(1);
var =加法器(- 1);
DEC现在是两个新函数,传入参数值(+ -)1
警报(公司(99));100
警报(DEC(101));100
警报(加法器(100)(2));102
警报(加法器(2)(100));102
例如,Ali Yu Bo的seajs源代码:
将代码复制如下:
util-lang.js最小语言增强* -
* /
函数类型(类型){
返回功能(obj){
返回{ }。tostring.call(obj)= {对象+类型+ }
}
}
VAR采用=类型(对象);
VaR isstring =类型(字符串);
希望本文能对大家的javascript程序设计有所帮助。