我需要知道:
之间的区别Namespace = (function () {
return {
name: 'Module',
dep: ['d', 'a']
};
})();
和
var Namespace = (function () {
return {
name: 'Module',
dep: ['d', 'a']
};
})();
这很简单,但我仍然不明白。
答案 0 :(得分:2)
就个人而言,我从不遗漏它。如果在函数内声明变量,那么如果你忽略变量变为全局变量的var
关键字。这是因为变量在JavaScript中具有功能级别范围。在给定Namespace
的示例中,无论是否使用var
,都将是一个全局变量,因为它未在函数内声明。您可以通过将var
添加到下面示例1中的Namespace
变量来测试此理论。
示例1:
//I am a global variable with or without the var keyword because
//I am declared outside of a function.
Namespace = (function () {
return {
name: 'Module',
dep: ['d', 'a']
};
})();
function test(){
Namespace = "I was changed because i have global scope";
}
//Run the test function to gain access to the global variable inside.
test();
//You will see that the value was changed by calling the test function
console.log(Namespace);
现在,如果您将Namespace
变量放在函数中,它现在仍然是没有var
关键字的全局变量。在下面的示例中,我已将Namespace
变量移到函数内部,并将var
关键字添加到其中,以使其成为非全局函数。如果从示例2中函数内的var
变量中删除Namespace
关键字,您将看到它将是一个全局变量,并且脚本中的最后一个console.log(Namespace)
调用将打印从Namespace
函数中取出getNameSpace
值。
示例2:
function getNameSpace(){
var Namespace = (function () {
return {
name: 'Module',
dep: ['d', 'a']
};
})();
}
function test(){
Namespace = "I have global scope even inside a function because I am missing the var keyword.";
}
test();
//print the value of the global variable Namespace
console.log(Namespace);
//call get nameSpace
getNameSpace();
//This will still print the value from the test function because the variable inside of
//get Namespace has local or function level scope because it has the var keyword.
console.log(Namespace);
希望所有这些现在更有意义。如果它不让我知道我会尽力帮助。要记住的一件好事是始终使用var关键字,如果您不希望脚本的其他部分直接访问变量,则将其放在函数内(也称为闭包)。
答案 1 :(得分:1)
使用var时,在函数的当前范围内创建变量。 如果没有var,将在全局范围内创建变量,这通常很糟糕。
使用var并始终在封闭范围(不是全局范围)中创建变量,除非您有充分的理由不这样做。