作者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