下面来看一段代码:
var i=1;
$(function(){
console.log(i);
})
这样一段js代码会打印出什么呢?答案大概都知道是:1
那将上面的代码再修改一下呢?
var i=1;
$(function(){
console.log(i);
var i=2;
})
这样会打印出什么呢?可能大部分都会认为:1,可惜答案不是,那是2吗?也不是,答案是:undefined
为什么是:undefined呢,这就是js的提升效应:
同一作用域下,声明变量函数的语句会提升到作用域最上面 ,js的编译机制就是这样,编译器 把声明全部提前,但是 赋值又没有提前
上诉代码编译的时候就会变成下面这样:
var i = 1;
$(function () {
var i;
console.log(i);
i = 2;
});