这个闭包代码可行:
function setupSomeGlobals(){
var num = 666;
gPrintNumber = function() { // play with var assignment
console.log(num)
}
gIncreaseNumber = function() {
num++;
}
}
setupSomeGlobals();
gPrintNumber();
gIncreaseNumber();
gPrintNumber();
然而,当我将var
关键字放在代码中的函数前面时,一切似乎都不起作用。这是为什么? var
仅将这些变量设为本地吗?为什么会这么重要?
function setupSomeGlobals(){
var num = 666;
var gPrintNumber = function() { // play with var assignment
console.log(num)
}
var gIncreaseNumber = function() {
num++;
}
}
setupSomeGlobals();
gPrintNumber(); // ReferenceError: gPrintNumber is not defined
gIncreaseNumber();
gPrintNumber();
答案 0 :(得分:1)
var是否仅将这些变量设为本地?
完全。您无法从setupSomeGlobals
函数外部访问局部变量。
未声明的变量,即没有var
,变成全局变量,你应该避免这是非常糟糕的做法。如果要以干净和安全的方式封装某些函数,请尝试使用模块模式:
function setupSomeMethods() {
var num = 666;
return {
gPrintNumber: function() {
console.log(num)
},
gIncreaseNumber: function() {
num++;
}
};
}
var methods = setupSomeMethods();
methods.gPrintNumber(); // 666
methods.gIncreaseNumber();
methods.gPrintNumber(); // 667