首页 > 解决方案 > JavaScript中学习“闭包”的例子出现错误

问题描述

我现在正在学习 JavaScript。我在网上找到了一个示例并在 Atom 中运行。不幸的是,出现错误提示“意外的令牌,预期的,(17:0)”。谁能告诉我如何用解释修复代码?

非常感谢您提前。

    var globalVar = "abc"; 


    (function outerFunction (outerArg) { 

        var outerFuncVar = 'x';    

        (function innerFunction (innerArg) { 
            var innerFuncVar = "y"; 
            console.log(          
                "outerArg = " + outerArg + "\n" +
                "outerFuncVar = " + outerFuncVar + "\n" +
                "innerArg = " + innerArg + "\n" +
                "innerFuncVar = " + innerFuncVar + "\n" +
                "globalVar = " + globalVar);
     
        }
    }
 

预期结果是:

    outerArg = 7
    outerFuncVar = x
    innerArg = 5`enter code here`
    innerFuncVar = y
    globalVar = abc

标签: javascriptclosures

解决方案


您错过了一些括号,因为您正在使用自调用功能。

(function() {
   // code
})();

正如您在上面看到的,以下一对括号将括号内的代码转换为表达式:

function(){...}

下一对,即第二对括号继续运算。它调用函数。请检查您的运行示例。

var globalVar = "abc";
// Parent self invoking function
(function outerFunction (outerArg) { // begin of scope outerFunction
    // Variable declared in outerFunction function scope
    var outerFuncVar = 'x';
    // Closure self-invoking function
    (function innerFunction (innerArg) { // begin of scope innerFunction
        // variable declared in innerFunction function scope
        var innerFuncVar = "y";
        console.log(
            "outerArg = " + outerArg + "\n" +
            "outerFuncVar = " + outerFuncVar + "\n" +
            "innerArg = " + innerArg + "\n" +
            "innerFuncVar = " + innerFuncVar + "\n" +
            "globalVar = " + globalVar);

    }// end of scope innerFunction)(5); // Pass 5 as parameter
    )(5);
    })(5);


推荐阅读