以下代码演示了一个立即调用的函数表达式,该表达式用作解构赋值表达式中默认值的右侧值。
const { foo = (function bar() { return 'bam'; }()) } = {};
函数表达式 bar
在表达式外部不可见。
这是否意味着 JavaScript 具有表达式作用域?
如果是这样,这是否意味着该表达式有自己的概念LexicalEnvironment
?
最佳答案
函数表达式 bar
不可见,因为它是一个函数表达式,即使是一个命名函数表达式。它不会在符号表中为该函数创建任何符号。
function bar() {}
这是一个创建符号bar
的函数声明。
(function bar() {});
这是一个函数表达式,不会产生任何结果。它是一个命名函数表达式,因此您会在堆栈跟踪中看到弹出的函数名称,并且该函数可以通过名称引用自身,但它不是函数声明。
关于javascript - JavaScript 有表达式作用域吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574948/