javaScript中的函數聲明提升
關于函數聲明提升 -(所有聲明變量或聲明函數都會被提升到目前函數的頂部);
但是
函數聲明function a(){}和函數表達式var a = function(){}的差別:
函數聲明被徹底的提升并且可以在聲明之前被調用
函數表達式雖然也被提升了,但是調用時值是undefined
相信下面兩個小例子會讓你完全明白:
例1
addition(4, 7);
substraction(10, 2);
console.info(addition(4, 7), substraction(10, 2))//輸出->11,undefined
function addition(num1, num2) {
return num1 + num2;
}
var substraction = function (num1, num2) {
return num1 - num2;
}
變量提升之後的情況
function addition(num1, num2) {
return num1 + num2;
}
var substraction;
console.info(addition(4, 7), substraction(10, 2))//輸出->11,undefined
substraction = function (num1, num2) {
return num1 - num2;
}
例2
var foo = 1;
(function () {
console.log(foo); //undefined
var foo = 2;
console.log(foo); //2
})();
//變量聲明提升之後的情況
(function () {
var foo;
console.log(foo); //undefined
foo = 2;
console.log(foo); //2
})();
是不是已經很明白了?