※※※ 一个菜鸟眼中的js闭包 (写给初学者) ※※※ 本帖最后由 hetengfei_ 于 2011-12-12 23:45:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果最后一步跳得快了,请看下面://------------------下面我解释:疑点1 ------------------------ var Hello = function(Name){ alert("Hello:"+Name); }; Hello("Jim"); //以上是函数 的调用, //如果Hello函数只调用一次, 可以缩写成如下: //(上下等价) var Hello; ( Hello = function(Name){ alert("Hello:"+Name); } )("Jim"); //进一步缩写; 把变量去了。 (上下等价) ( function(Name){ alert("Hello:"+Name); } )("Jim");//------------------下面我进一步解释,疑点2------------------------var a = "Hello";//可以写缩成如下: (上下等价)var getHello=function (p){ return p;};var a = getHello("Hello");//进一步缩写 (上下等价)var a = (function (p){ return p;})("Hello");//----------------如果把上例的字符串"hello" 换成( 函数)-------------var flag=false;//声明函数afunction a(pa){ if(pa) { return true; } else { return false; }};var outp=a(flag);alert(outp);//缩写 如下: (上下等价)var flag=false;//声明函数avar a = (function(){ return (function (pa){ if(pa) { return true; } else { return false; } });})();var outp=a(flag);alert(outp);// 进一步缩写 如下:(上下等价)var flag=false;//声明函数a后马上使用。 //可以不写 函数a ,直接写 匿名函数,在此我还是写上 函数a 吧,大家好认var outp=(function(flagIn){ var a =function (pa){ if(pa) { return true; } else { return false; } }; return a(flagIn);})(flag);alert(outp);///进 一步简化就是 原型了。(上下等价) var outp=(function(flagIn){ return function(){ if(flagIn) { return true; } else { return false; } };})(flag);alert(outp);//END 问我 js闭包是什么? 我说: js 闭包 是 比较懂 js 语法的家伙 再玩弄 js 语法 来现实传参。即是玩弄,就是要让人觉得高深, 所以取名“js闭包”让人搞不透! function DOG() { this.Name = "Jim"; //要传的传数 this.ShowName = function() { var _this = this setInterval(function(){ alert(_this.Name) },1000) }}var obj = new DOG()obj.ShowName()这样也可以的 highcharts图表值标签如何直接显示在图表上? 哪位仁兄帮我看下,看看错误出在哪里? sos 关于单选按钮隐藏和显示table的问题 取字符串中"user="后面的10个字符,如何做 怎么用javascript(循环)下面的图 new Date(参数)不能正确显示时间? JScript自定义对像 jquery 影响播放控件 如何实现,页面事件使一个Link变成disabled的?多谢啦。 一个table里面可以一些格有边框,一些格没有边框吗? 请教jquery或js如何判断客户端设备类型(pc/手机/ipad等) 80分,请教一个小效果
//------------------下面我解释:疑点1 ------------------------
var Hello = function(Name){
alert("Hello:"+Name);
};
Hello("Jim");
//以上是函数 的调用,
//如果Hello函数只调用一次, 可以缩写成如下:
//(上下等价)
var Hello;
(
Hello = function(Name){
alert("Hello:"+Name);
}
)("Jim");
//进一步缩写; 把变量去了。 (上下等价)
(
function(Name){
alert("Hello:"+Name);
}
)("Jim");//------------------下面我进一步解释,疑点2------------------------
var a = "Hello";
//可以写缩成如下: (上下等价)
var getHello=function (p){
return p;
};
var a = getHello("Hello");
//进一步缩写 (上下等价)
var a = (function (p){
return p;
})("Hello");//----------------如果把上例的字符串"hello" 换成( 函数)-------------
var flag=false;
//声明函数a
function a(pa){
if(pa)
{
return true;
}
else
{
return false;
}
};
var outp=a(flag);
alert(outp);
//缩写 如下: (上下等价)
var flag=false;
//声明函数a
var a = (function(){
return
(function (pa){
if(pa)
{
return true;
}
else
{
return false;
}
});
})();
var outp=a(flag);
alert(outp);
// 进一步缩写 如下:(上下等价)
var flag=false;
//声明函数a后马上使用。
//可以不写 函数a ,直接写 匿名函数,在此我还是写上 函数a 吧,大家好认
var outp=
(function(flagIn){
var a =function (pa){
if(pa)
{
return true;
}
else
{
return false;
}
};
return a(flagIn);
})(flag);
alert(outp);
///进 一步简化就是 原型了。(上下等价)
var outp=
(function(flagIn){
return function(){
if(flagIn)
{
return true;
}
else
{
return false;
}
};
})(flag);
alert(outp);
//END
我说:
js 闭包 是 比较懂 js 语法的家伙 再玩弄 js 语法 来现实传参。即是玩弄,就是要让人觉得高深,
所以取名“js闭包”
让人搞不透!
this.Name = "Jim"; //要传的传数
this.ShowName = function() {
var _this = this
setInterval(function(){
alert(_this.Name)
},1000)
}
}
var obj = new DOG()
obj.ShowName()
这样也可以的