我正在寻找使用对象创建命名空间和自我执行匿名函数。哪一个被认为是更好的选择?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