【发布时间】:2013-03-12 11:27:01
【问题描述】:
我正在研究使用对象和自执行匿名函数创建命名空间。哪一个被认为是更好的选择?
使用对象,提供一个唯一的名称“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 is not defined。那是因为myFunc2是匿名函数的本地函数。 -
在您的第三个代码块中,
myAppName将是undefined,因为您没有从函数返回任何内容。
标签: jquery namespaces