js 权威指南函数章节中同一段代码在浏览器中可以执行, 但在 nodejs 下却无法执行?

作者站长头像
站长
· 阅读数 6

在 <Javascript 权威指南> 书中的 8.7.7 节(大概在 213 页)中, 有以下代码

let scope = "global";
function constructFunction() {
    let scope = "local";
    return new Function(
        "return scope"
    );
}
// This line returns "global" because the function returned by the
// Function() constructor does not use the local scope.
constructFunction()();

在浏览器中正常执行并返回了预期的结果 global.但在 nodejs 下却无法运行通过, 且会抛出异常 ReferenceError: scope is not defined.

请问, 这是为何?

回复
1个回答
avatar
test
2024-07-09

不同的原因是浏览器脚本中的顶级作用域是全局作用域,而 Node.js 文件中的顶级作用域是模块作用域。你定义了 let scope = "global"; 在浏览器中顶层有windows对象,scope把挂在windows上,但是在 Node.js 模块范围内,var 只是在模块中创建一个 var,它不会在全局对象上创建全局或属性。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容