fn();
var fn = function() {
console.log(2);
}
function fn() {
console.log(1);
}
fn();
上面代码中的打印结果是1,2
打印1可以理解,就是函数声明式可以提升,而函数表达式无法提升,所以调用的是第二个fn(),但是第二个打印我就无法理解了,问什么调用的是第一个定义的fn()呢。
因为var 定义的元素存在声明提升,所以代码翻译过来长这样
第二个 是因为 因为 已经执行function fn .再执行 的var fn 然后fn 被赋值成了 function(){ console.log(2) }
fn();
console.log(fn,"99")
var fn = function () {
console.log(2);
}
console.log(fn,"991")
function fn() {
console.log(1);
}
console.log(fn,"992")
fn();
可以debugg一下 看看执行顺序
变量和函数声明都同时提升,函数的赋值也提升。
这个例子里,函数先被赋值函数2,再被赋值函数1。