js中的函數聲明和函數表達式的區別


一、聲明與表達式的格式

1.1 聲明式的格式:

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

例子:

function aaa(){}  // 函數聲明

1.2 表達式的格式:

函數表達式: function 函數名(可寫可不寫)(){} : 分別代表:命名函數表達式,匿名函數表達式

例子:

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)}(); // 可以的
~function aaa(){alert(2)}();  

2.2 函數表達式可以被提前解析出來

看下面例子:這兩個例子中,執行結果的不一樣,可以看出函數表達式是提前被解析出來的。
如果需要通過判斷來調用不同函數(函數名相同),最好使用函數表達式

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

2.3 命名函數表達式跟匿名函數表達式的區別

看例子:

var a = function aaa(){
    alert(1);
    alert(typeof aaa); // 內部可以找到
}
a();
aaa(); // 外部找不到  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM