面试官:下列代码输出是什么
console.log(a)
var a = 100
function a(){}
我:100!
面试官:...要不你自己在浏览器console试试?
输出结果是ƒ a(){},这就很尴尬了
说好的变量提升呢?
说好的函数和变量相比,会被优先提升呢?(这意味着函数会被提升到更靠前的位置)
"说好的函数和变量相比,会被优先提升"这句没有问题,问题关键在于变量提升只会提升变量的声明
JavaScript 只会提升声明,不会提升其初始化。如果一个变量先被使用再被声明和赋值的话,使用时的值是 undefined。参见例子:
console.log(num); // undefined
var num = 6;
所以最开始面试官所问的代码的实际执行情况是
首先在全局作用域声明了一个函数a,然后是var a,注意这里只是声明了变量a并没有赋值。所以a的值仍然指向函数,接着执行console.log(a)输出ƒ a(){},最后a=100