【发布时间】:2019-11-14 03:50:51
【问题描述】:
我从 Ecma 规范中阅读了 with 声明,并在其中阅读了这样的声明评估。
- 设 val 为 Expression 的计算结果。
- 设 obj 是 ? ToObject(?GetValue(val))。
- 设 oldEnv 为正在运行的执行上下文的 LexicalEnvironment。
- 设 newEnv 为 NewObjectEnvironment(obj, oldEnv)。
- 将 newEnv 的 EnvironmentRecord 的 withEnvironment 标志设置为 true。
- 将正在运行的执行上下文的 LexicalEnvironment 设置为 newEnv。
- 令 C 为 Statement 求值的结果。
- 将正在运行的执行上下文的 LexicalEnvironment 设置为 oldEnv。
- 返回完成(UpdateEmpty(C, undefined))。
如果 with 语句使用词法环境进行评估,为什么我的示例代码不起作用?
const user = {
fullName: "Murad Sofiyev"
};
with(user) {
let firstName = "Tofiq";
fullName = "Tofiq Sofiyev";
}
console.log(user.firstName); // Undefined
console.log(user.fullName); // Tofiq Sofiyev
PS:我知道 with 语句已被弃用,但这有助于我理解词法环境和变量环境:)
【问题讨论】:
标签: javascript