不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
JavaScript闭包
编辑:dnawo 日期:2009-07-22
1.调用对象
当函数被调用的时候,在作用域链顶部创建一个他的调用对象,函数的参数、变量等在调用对象中都有定义,调用对象的下一层为全局对象。当检测到不再有对函数的引用时,调用对象即被删除。在上边例子中,fn(0)调用fn时,创建了fn的调用对象,其里面有对i的定义。
同一个函数多次调用时,将会创建多个调用对象,举例:
2.闭包
执行结果:
引用内容
说明:当调用f时,创建了f的调用对象,里边包含有i和g的定义,fn中包含了对g引用,所以,当给fn赋值之后,虽然后面的代码中不再有对f的引用,但f的调用对象仍不会被删除(若删除了调用对象,fn将无法使用)。当调用fn时,作用域链上就有三个对象:fn的调用对象、f的调用对象和全局对象,由于f的调用对象未被删除,那么他的属性i对于fn而言就相当于是一个全局变量,所以多次调用fn时,i的值将递增。
上例简写:
JavaScript函数是将要执行的代码以及执行这些代码的作用域构成的一个综合体,这种代码和作用域的综合体就叫做闭包。JavaScript中所有的函数都是一个闭包,但只有当一个嵌套函数被导出到它所定义的作用域外时,这种闭包才强大。
复制内容到剪贴板
程序代码

function fn(i)
{
return i;
}
alert(fn(0));
{
return i;
}
alert(fn(0));
当函数被调用的时候,在作用域链顶部创建一个他的调用对象,函数的参数、变量等在调用对象中都有定义,调用对象的下一层为全局对象。当检测到不再有对函数的引用时,调用对象即被删除。在上边例子中,fn(0)调用fn时,创建了fn的调用对象,其里面有对i的定义。
同一个函数多次调用时,将会创建多个调用对象,举例:
复制内容到剪贴板
程序代码

function fn(i)
{
return function(){return i};
}
var a = [fn(0),fn(1),fn(2)];
alert(a[0]()); //调用对象中i值为0
alert(a[1]()); //调用对象中i值为1
alert(a[2]()); //调用对象中i值为2
{
return function(){return i};
}
var a = [fn(0),fn(1),fn(2)];
alert(a[0]()); //调用对象中i值为0
alert(a[1]()); //调用对象中i值为1
alert(a[2]()); //调用对象中i值为2
2.闭包
复制内容到剪贴板
程序代码

function f()
{
var i = 0;
var g= function(){return ++i;};
return g;
}
var fn= f();
alert(fn());
alert(fn());
alert(fn());
{
var i = 0;
var g= function(){return ++i;};
return g;
}
var fn= f();
alert(fn());
alert(fn());
alert(fn());
执行结果:

1
2
3
2
3
说明:当调用f时,创建了f的调用对象,里边包含有i和g的定义,fn中包含了对g引用,所以,当给fn赋值之后,虽然后面的代码中不再有对f的引用,但f的调用对象仍不会被删除(若删除了调用对象,fn将无法使用)。当调用fn时,作用域链上就有三个对象:fn的调用对象、f的调用对象和全局对象,由于f的调用对象未被删除,那么他的属性i对于fn而言就相当于是一个全局变量,所以多次调用fn时,i的值将递增。
上例简写:
复制内容到剪贴板
程序代码

var fn = (function(){
var i = 0;
return function(){ return ++i; };
})();
alert(fn());
alert(fn());
alert(fn());
var i = 0;
return function(){ return ++i; };
})();
alert(fn());
alert(fn());
alert(fn());
JavaScript函数是将要执行的代码以及执行这些代码的作用域构成的一个综合体,这种代码和作用域的综合体就叫做闭包。JavaScript中所有的函数都是一个闭包,但只有当一个嵌套函数被导出到它所定义的作用域外时,这种闭包才强大。
评论: 0 | 引用: 0 | 查看次数: 4207
发表评论
请登录后再发表评论!