作者GrantHill33 (葛兰特希尔)
看板Ajax
标题[问题] module pattern的小疑问
时间Wed Apr 10 10:33:45 2013
小弟刚入门,还在学习JS
关於MODULE PATTERN有些疑问:
--
var testModule = function(){
//private variables and methods
var privateNum = 0;
var privateMethod = function(){
return false;
};
//public variables and methods
return{
getPrivateNum: function(){
return privateNum;
},
setPrivateNum: function(){
return privateNum++;
},
getPrivateMethod: function(){
return privateMethod();
}
};
}();
--
var testModule = (function(){
//private variables and methods
var privateNum = 0;
var privateMethod = function(){
return false;
};
//public variables and methods
return{
getPrivateNum: function(){
return privateNum;
},
setPrivateNum: function(){
return privateNum++;
},
getPrivateMethod: function(){
return privateMethod();
}
};
})();
--
以上两段练习的程式码差别只在小括号包整段程式码上,
我自己测试起来有没有括号似乎都一样!?
因为书上几乎都是有括号的,所以想向各位高手请教差别,
就我理解不就是在使用anonymous function所以最後要有()去执行,
但包不包起来好像没差? 因为我测试包整段也可以执行 Orz
Ex:
var testModule = (function(){
//private variables and methods
var privateNum = 0;
var privateMethod = function(){
return false;
};
//public variables and methods
return{
getPrivateNum: function(){
return privateNum;
},
setPrivateNum: function(){
return privateNum++;
},
getPrivateMethod: function(){
return privateMethod();
}
};
}());
麻烦指导了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.226.65.79
1F:推 LPH66:刚刚在 jsfiddle 试了下: function(){}() 这样好像不合语法 04/10 11:51
2F:→ LPH66:所以才要包 () 变成一个运算式後才能呼叫 (的样子) 04/10 11:52
3F:推 mrbigmouth:包整段(function(){}())跟包前面(function(){})()都可 04/10 11:56
4F:→ mrbigmouth:不能不包就是了 04/10 11:56
5F:→ GrantHill33:所以可能只是在FIREFOX上不包是可以的 了解 04/10 12:21
6F:推 s25g5d4:不对阿 这种情况是可以不包的 只有函式宣告才一定要包 04/10 18:29
7F:→ s25g5d4:= 本来就有运算的意义了 我在chrome上不包也可以跑 04/10 18:29
8F:→ s25g5d4:但是还是建议要包 因为这样比较好分辨到底是给予function 04/10 18:30
9F:→ s25g5d4:实体还是执行立即函式 04/10 18:30
10F:→ s25g5d4:然後{}())跟{})()的差别是...後者JSLint会喷错误 04/10 18:31
11F:推 mrbigmouth:chrome上不包跑不了吧? 04/12 09:47
14F:→ s25g5d4:的文章 讲得很清楚 04/15 21:18