javascript必知必会之closure
2009-09-21 00:00:00 来源:WEB开发网closure的一些用法
当内部函数和自由变量位于同一closure时,可以随意访问,而声明顺序并不重要.
几个常用的例子:
//一些应用
flag = true;
function OuterFun()
{
var num = 100;
var printNum = function(){alert(num);} //此处引用的num是引用,而不是值,所以后面改变num,此处的num同样生效
num ++;
return printNum;
}
var myfunc = OuterFun();
myfunc(); //输出的是101,而不是100
//另一个例子,下面的例子,可以看到匿名函数(内部函数)先于外部函数变量的声明,但是仍然能够访问外部函数的变量
// 也就是说内部函数与外部函数的变量位于同一个closure, 所以可以访问
function SameClosure()
{
var iCanAccess = function(){alert(name);};
var name = "zhutao";
return iCanAccess;
}
var testSameClosure = SameClosure();
testSameClosure();// zhutao
// 另一个应用,关于module pattern, 这样可以实际所谓的 private, public等方法和变量
var module = (function Module(){
var privateVar = "zhutao is private"; // private
return {
publicGetPrivateVar : function(){
return privateVar;
}, // public method, 可以取所谓的private变量
publicVar : "I'm a public variable" // public variable
};
})();
if (flag)
{
alert(module.publicGetPrivateVar()); // zhutao is private
alert(module.publicVar); // I'm a public variable
alert(module.privateVar); // undefined
}
编缉推荐阅读以下文章
- javascript必知必会之prototype
Tags:javascript closure
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接