题目 09 / 14
函数绑定为什么会变成数字?
知识点: 函数调用
函数声明先初始化 a,随后 var 初始化器又用 2 覆盖同一个绑定。
使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。预测输出结果
执行 typeof 表达式时,a 还是声明的函数吗?
var a = 2
function a() {
console.log(3)
}
console.log(typeof a)查看答案与完整解析
正确输出
number为什么会这样
语句求值开始前,声明实例化会先用函数对象初始化 a。
var 声明不会再创建另一个 a,但它的初始化器仍然是按源码顺序执行的赋值。
var a = 2 执行后,a 保存的是数字,因此 typeof a 得到 "number"。
这道题考察什么
- 共享同名绑定
- 函数声明初始化
- 运行时赋值顺序
运行环境前提
本题讨论同一作用域中的经典函数声明和 var 声明。