函数声明提升
sayHi();
function satHi() {
alert("Hi");
}
//这个是没问题的,函数在代码执行之前会先读取函数声明。但是当使用函数表达式的时候下面的例子会抛出错误。
sayHi(); //错误;函数不存在
var sayHi = function() {
alert("Hi");
}
函数声明与表达式之间的区别。
//不要这样做
if(condition){
function sayHi(){
alert("Hi");
}
} else {
function sayHi(){
alert("Yo");
}
}
//表面上看的代码表示conditon为true时,使用一个sayHi()的定义;否则使用另一个定义。实际上,这在ECMAScript中属于无效语法,JavaScript引擎会尝试修正错误,将其转化成合理的状态。但问题是浏览器修正错误的做法是不一致的。大多数浏览器会忽略condition,返回第二个申明。 Firefox会在condition为true是返回第一个声明。所以这种写法不应该出现在你的代码中。 so,在这里我们可以使用函数表达式,就不会出现什么问题了。
//可以这样做
var sayHi;
if(condition){
sayHi = function(){
alert("Hi!");
};
} else {
sayHi = function(){
alert("Yo!");
};
}