首先崎逃,函數(shù)聲明和函數(shù)表達式的區(qū)別如下:
//函數(shù)聲明
function foo(){}
//函數(shù)表達式
(function foo(){})()
//函數(shù)表達式
var foo = function(){};
在使用函數(shù)聲明時眉孩,提升的過程如下:
foo();//function foo success
function foo(){console.log('function foo success');}
====>(等價于)
function foo(){console.log('function foo success');}
foo();//function foo success
在使用函數(shù)表達式時勒葱,提升的過程如下
foo();//TypeError
var foo = function(){};
====>
var foo;
foo();//TypeError
foo = function(){};
foo();//TypeError
bar();//ReferenceError
var foo = function bar(){};
====>
var foo;
foo();//TypeError
bar();//ReferenceError
foo = function(){
var bar = self;//類似于這樣的格式
};