举个栗子:
function foo() {
alert("global foo");
}
function bar() {
alert("global bar");
}
var v = "global var"; //定义全局变量
function hoistMe() {
alert(typeof foo);
alert(typeof bar);
alert(v);
foo();
bar();
function foo() {
alert("local foo");
}
var bar = function() {
alert("local bar");
}
var v = "local";
}
(function() {
hoistMe();
});
//函数表达式和变量表达式只是其声明被提升,函数声明是函数的声明和实现都被提升。
/**由于函数提升的效果,hoistMe方法相当于
function hoistMe()
{
//函数声明,变量foo以及其实现被提升到hoistMe函数顶部
function foo() { alert("local foo"); }
//函数表达式,仅变量bar被提升到函数顶部,实现没有被提升(同变量提升)
var bar = undefined;
//变量声明被提升
var v = undefined;
alert(typeof foo); //function
alert(typeof bar); //undefined
foo(); //local foo
bar(); //报错,缺少对象
bar = function() {
alert("local bar");
};
v = "local";
}