Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 闭包中的var functionName与functionName赋值_Javascript_Function_Closures_Variable Declaration - Fatal编程技术网

Javascript 闭包中的var functionName与functionName赋值

Javascript 闭包中的var functionName与functionName赋值,javascript,function,closures,variable-declaration,Javascript,Function,Closures,Variable Declaration,此关闭代码将起作用: function setupSomeGlobals(){ var num = 666; gPrintNumber = function() { // play with var assignment console.log(num) } gIncreaseNumber = function() { num++; } } setupSomeGlobals(); gPrintNumber();

此关闭代码将起作用:

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();

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

缺少
var
是一个错误,它会使变量隐式全局变量。这样的错误不是好的做法吗?你所说的“隐式全局变量”是什么意思?“var是否仅使这些变量成为局部变量?”是的,这正是它所做的相关(重复?):