题目 05 / 14
为什么 x 开始是函数,后来变成了数字?
知识点: 声明实例化
声明实例化只创建一个绑定,后续赋值会替换其中保存的值。
使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。预测输出结果
追踪同一个 x 绑定在三次 console.log 时分别保存什么。
console.log(x)
var x = 10
console.log(x)
x = 20
function x() {}
console.log(x)查看答案与完整解析
正确输出
[Function: x]
10
20为什么会这样
声明实例化阶段,函数声明用函数对象初始化 x。相同名称的 var 声明不会再创建第二个绑定。
执行 var x = 10 时,初始化器把 10 写入已有的 x,因此第二次输出 10。
后续赋值又把 10 替换为 20。函数声明不会在它的源码位置再次执行。
这道题考察什么
- 函数声明初始化
- 重复 var 声明
- 绑定值被重新赋值
运行环境前提
不同开发者工具显示函数对象的形式不同;第一行表示函数 x 本身。