javascript - JavaScript 有表达式作用域吗?

标签 javascript scope

以下代码演示了一个立即调用的函数表达式,该表达式用作解构赋值表达式中默认值的右侧值。

const { foo = (function bar() { return 'bam'; }()) } = {};

函数表达式 bar 在表达式外部不可见。

这是否意味着 JavaScript 具有表达式作用域?

如果是这样,这是否意味着该表达式有自己的概念LexicalEnvironment

最佳答案

函数表达式 bar 不可见,因为它是一个函数表达式,即使是一个命名函数表达式。它不会在符号表中为该函数创建任何符号。

function bar() {}

这是一个创建符号bar的函数声明。

(function bar() {});

这是一个函数表达式,不会产生任何结果。它是一个命名函数表达式,因此您会在堆栈跟踪中看到弹出的函数名称,并且该函数可以通过名称引用自身,但它不是函数声明。

关于javascript - JavaScript 有表达式作用域吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574948/

相关文章:

java - 循环内变量声明与同一变量名的多个声明

javascript - Dynamoose 如何让多个模型共享一个表?

javascript - 将 AJAX GET 响应的一部分(JSON 格式)存储到字符串变量中时出现问题

javascript - 尝试上传到 Amazon S3 时出现 "Unsupported body payload object"

service - 使用原型(prototype)作用域时出现 Symfony2 ScopeCrossingInjectionException

scope - Call-By-Name 和 Call-By-Reference 之间的区别

c++ - 扩展在 if/else 序列中初始化的变量的范围

c - 变量的生命周期

javascript - 如何从 HTML DOM 中完全隐藏一个 div?

javascript - 响应式正方形网格内的响应式正方形网格