javascript - 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
解决方案
您错过了一些括号,因为您正在使用自调用功能。
(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);
推荐阅读
- python - 为什么在 for 循环中使用 PIL 的 Image.paste 时出现图像重叠问题?
- c++ - unordered_set 对的令人惊讶的行为
- jupyter-notebook - `jupyter notebook`和`jupyter server`有什么区别?
- arrow-functions - “this”在函数中起作用,但在箭头函数中起作用。我想不知道为什么
- javascript - 以字符串形式获取 console.log 的颜色输出
- python - 使用 tf.foldl 返回多个值
- r - 每当我在 R 中为 Sankey 调用 colourScale 时,它都不会输出图表
- angular - Nx/Angular 项目的 Esslint 配置(无主机元数据属性)
- rust - 为什么 println!(foo.bar()?) 移动 foo?
- openapi - 如何在 OpenAPI 规范中内联示例字段?