闭包初理解
闭包理解:
①理解JS特殊的变量作用域: JS的全局变量可以在局部函数中被引用,但是局部函数内部定义的变量无法在全局中得到引用。————“链式作用域”
②理解闭包: 闭包就是能够读取到其他函数内部变量的函数,本质上,闭包是将函数内部和外部链接起来的桥梁。
闭包用处:
①可以通过闭包读取到函数内部定义的变量;
②可以让函数内部一些变量的值永远存储在内存中(跟JS的垃圾回收机制有关)
使用闭包需要注意:
①不能滥用闭包,否则会造成内存泄漏,造成网页的性能问题。 解决方法:退出函数之前,删除所有不使用的局部变量。
②js引用this时,需要注意this的作用域。
③闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随意改变父函数内部变量的值。
闭包例子:
① for(var i = 1; i <= 3; i++){
(function(i){
setTimeout(function(){
console.log(i);
},0)
})(i)
}
for(var i = 1; i <= 3; i++){
setTimeout(function(){
console.log(i);
},0)
}
②$(function(){
var con = $("div#panel");
this.id = "content";
con.click(function(){
alert(this.id);//panel
});
});
$(function(){
var con = $("div#panel");
this.id = "content";
var self = this;
con.click(function(){
alert(self.id);//content
});
});
③function CreateArray1() {
var array = new Array();
for (var i = 0; i < 10; i++) {
//区别
array[i] = (function (m) {
return m;
})(i);
}
return array;
}
var results1 = CreateArray1();
document.write("Method1 Results:<br/>");
for (var i = 0; i < results1.length; i++) {
document.write(results1[i]+"<br/>");
}
document.write("------------------------<br/>");
document.write("Method2 Results:<br/>");
function CreateArray2() {
var array = new Array();
for (var j = 0; j < 10; j++) {
//区别
array[j] = function () {
return j;
};
}
return array;
}
var results2 = CreateArray2();
for (var i = 0; i < results2.length; i++) {
document.write(results2[i]() + "<br/>");
}
- js中的闭包之我理解
- 深入理解JavaScript的闭包特性 如何给循环中的对象添加事件
- js闭包的理解
- javascript深入理解js闭包
- javascript深入理解js闭包
- 个人对js闭包的理解
- 深入理解javascript原型和闭包(完结)
- 理解Javascript的闭包
- 理解运用JS的闭包、高阶函数、柯里化
- swift 深入理解Swift的闭包
- 如何更好地理解闭包
- 简单理解闭包
- javascript 闭包理解
- 闭包的理解
- javascript深入理解js闭包
- 深入理解python中的闭包和装饰器
- 带你一分钟理解闭包--js面向对象编程
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 理解闭包的概念
- 理解C#中的闭包