我正在尋找使用對象創建命名空間和自我執行匿名函數。哪一個被認爲是更好的選擇?jQuery命名空間使用對象和自我執行匿名函數
使用對象,給出一個唯一的名稱'myAppName'足以防止碰撞?
var myAppName = {
val1: "abc",
val2: "xyz",
myFunc1: function() {
return this.val2;
}
}
console.log(myAppName.val1); // abc
console.log(myAppName.myFunc1()); // xyz
使用自執行的匿名函數:
(function() {
val1 = "abc";
var val2 = "xyz";
myFunc1 = function() {
return val1;
}
var myFunc2 = function() {
return val2;
}
})();
console.log(val1); // abc
console.log(myFunc1()); // abc
console.log(myFunc2()); // xyz
在自執行功能上面的代碼,它們似乎都執行。在變量和函數名之前是否有使用和不使用var的含義?我不太明白。有沒有辦法將變量和函數設置爲私有和公共的?或者是自執行功能中的所有內容都是私有的?
如果我在自我執行功能之前使用'var'會發生什麼?
var myAppName = (function() {
val1 = "abc";
var val2 = "xyz";
myFunc1 = function() {
return val1;
}
var myFunc2 = function() {
return val2;
}
})();
在你的第二個代碼塊中,調用'console.log(myFunc2());'不會顯示'xyx'。相反,它會拋出'ReferenceError:myFunc2未定義'。這是因爲'myFunc2'對匿名函數是本地的。 – 2013-03-23 04:04:02
在你的第三個代碼塊中,'myAppName'將會是'undefined',因爲你沒有從函數返回任何東西。 – 2013-03-23 04:05:11