题目 07 / 14
未声明的赋值何时会创建全局变量?
知识点: 全局绑定
非严格脚本对无法解析名称的赋值可能在全局对象上创建属性。
使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。预测输出结果
没有 var、let 或 const 声明,为什么仍然可以输出 b?
console.log(a)
b = 10
console.log(b)
var a = 20
console.log(a)查看答案与完整解析
正确输出
undefined
10
20为什么会这样
全局 var a 在执行前已经准备好,所以第一次输出 undefined。
在非严格脚本中,给无法解析的名称 b 赋值,会创建值为 10 的全局对象属性。
后面的 var 初始化器把 20 写入 a,因此最后输出 20。
这道题考察什么
- 非严格模式赋值
- 全局对象属性
- 已声明与未声明名称
运行环境前提
本题要求非严格经典脚本语义。严格模式和 ES Module 执行 b = 10 时会抛出 ReferenceError。