变量提升
变量提升只是提升变量的声明,并不会提升赋值
1.
alert(v);//Hello,这个毋庸置疑,傻子都能看出来
2.
var v = "Hello";
(function(){
alert(v);//Hello,这个也是显而易见的
})();
3.
var v = "Hello";
(function(){
alert(v);//undefined,这下你有没有闷逼????
var v = "I love you";
})();
上面代码,变量声明被提升了,相当于如下代码
var v = "Hello";
(function(){
var v;
alert(v);//undefined,这下这个结果你应该比我清楚
v = "I love you";
})();
4.
(function(){
var a = "one";
var b = "two";
var c = "three";
})();
实际上它是这样的
(function(){
var a,b,c;
a = "one";
b = "two";
c = "three";
})();
函数提升
函数提升是把整个函数提到当前作用域的顶部
函数定义的两种写法:函数表达式和函数声明方式
只有函数声明形式才能被提升
1.函数声明方式提升[成功]
function myTest(){
foo();
function foo(){
alert("foo函数提升成功");
}
}
myTest();//foo函数提升成功
2.函数表达方式提升[失败]
function myTest(){
foo();
var foo = function(){
alert("foo函数提升失败");
}
}
myTest();//报错:foo is not a function