Javascript设计模式之匿名函数与闭包
匿名函数
(function () {
var foo = 10;
var bar = 2;
console.log(foo*bar);
})(); // 20
带参数的匿名函数
(function (foo,bar) {
console.log(foo*bar);
})(10,2); // 20
var baz = (function (foo,bar) {
return foo * bar;
})(10,2);
console.log(baz); // 20
闭包,closure 闭包,闭包就是能够读取其他函数内部变量的函数
var baz;
(function () {
var foo = 10;
var bar = 2;
baz = function () {
return foo * bar;
}
})();
console.log(baz()); // 20
闭包代码块
能理解下面的几个代码块,就算能理解闭包了。闭包可以读取其他函数内部变量。
var that = this;
就是精髓。
// 代码块一
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name; // this是匿名函数
};
}
};
console.log(object.getNameFunc()()); // undefined
console.log(object.getNameFunc().call(object)); // My Object
// 代码块二
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){ // 闭包
return that.name;
};
}
};
console.log(object.getNameFunc()()); // My Object
// 代码块三
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return name;
};
}
};
console.log(object.getNameFunc()()); // The Window
// 代码块四
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return this.name; // this是object
}
};
console.log(object.getNameFunc()); // My Object
方法论总结:可以针对关键点,进行深入探讨。百度搜索相关的博文或百科探索。