天天看點

函數聲明與函數表達式

1.什麼是函數聲明,函數表達式

函數聲明:function 函數名(){}

函數表達式:function 函數名(){}。函數名可寫可不寫。寫出來的,就是命名函數表達式,不寫的就是匿名函數表達式

例子:

function aaa(){};這就是函數聲明

var a=function aaa(){};命名函數表達式

var a=function(){};匿名函數表達式

下面的都是函數表達式

(function aaa(){}) 

~function aaa(){}

-function aaa(){}

+function aaa(){}

!function aaa(){}

2.差別

(1)函數表達式可以直接後面加括号執行,而函數聲明是不可以的。

function aaa(){alert(1);}();//函數聲明不可以,結果有錯誤

var a=function aaa(){alert(1);}();//函數表達式可以,結果彈出1

~function aaa(){alert(1);}();//函數表達式可以,結果也彈出1      

(2)函數聲明可以被提前解析出來

如下面的例子:在火狐浏覽器中彈出的是1,但是在IE浏覽器中彈出的是2,但是函數表達式就不存在這樣的問題了。是以在這種情況下要用函數表達式。

if(true){
    function aaa(){
        alert(1);
    }
}
else{    
    function aaa(){
        alert(2);
    }
}

aaa();      

利用函數表達式:

if(true){
    var a = function aaa(){
        alert(1);
    }
}
else{    
    var a = function aaa(){
        alert(2);
    }
}

a();//用aaa();可以嗎?no!      

這時候彈出的都是1.

那麼問題來了,為啥不可以用aaa();因為這個aaa()在外面調用的話,是找不到的,但是在内部是可以找到的。

對于函數表達式,不要用;

var a=function aaa(){
    alert(1);
    alert(typeof aaa);
}
aaa();      

結果顯示

函數聲明與函數表達式
var a = function aaa(){
    alert(1);
    alert(typeof aaa);  //内部是可以找到的
}

a();

/*aaa();  //外面是找不到的*/      
函數聲明與函數表達式

 總結:

函數聲明與函數表達式的差別? 

繼續閱讀