JS函數-函式宣告和函數運算式之間的恩怨

來源:互聯網
上載者:User

JS函數-函式宣告和函數運算式之間的恩怨

“函式宣告”和“函數運算式”其實說白了 就是定義函數的方式

函式宣告:

 

function 函數名(){.....}

通過上面方式定義的函數就是函式宣告

 

 

函數運算式:通過函數運算式定義函數的方式比較多

1. var a = function test(){...} // 這是命名的函數運算式

 

  var a = function(){...} // 這是匿名的函數運算式

 

2. 將“函式宣告”定義的函數 用一對小括弧括起來,這樣也形成了函數運算式

 

(function test(){.....})  //這樣也是函數運算式

 

3. 還有就是在“函式宣告”前加位元運算符 也能構成函數運算式

例如:這些都是函數運算式

 

~function test(){.....}+function test(){.....}-function test(){.....}!function test(){.....}

 

區別: 函式宣告 和 函數運算式 有哪些區別那??

 

1.函數運算式可以直接 在後面加小括弧執行(這就是函數自執行),而函式宣告不可以

例如:

 

var a = function test() {        alert("hello");} // 這是一個函數運算式,在這個運算式後面加個括弧,就可以自動執行函數了

 

 

var a = function test() {        alert("hello");// 重新整理頁面就彈出hello了 }();

 

 

而函式宣告的方式 加個小括弧是不可以執行的,例如 瀏覽器會提示這種寫法是錯誤的

 

function test() {        alert("hello");}();

 

2.函式宣告 可以 被預解析,而函數運算式不可以;如果不明白js預解析的小夥伴,請參考另一篇文章《JS預解析》

例如:

 

 window.onload = function () {        test();        function test() { // 函式宣告            alert("hello");        }}

 

通過函式宣告的方式定義的函數是可以被預解析的,所以在function test()之前調用test()函數,自然彈出hello,

 

 window.onload = function () {        a();        var a = function () { // 函數運算式            alert("hello");        }}

 

通過函數運算式的方式定義的函數是不能被預解析的,所以在函數之前調用a(),就會報錯

 

再看一個例子:

 

window.onload = function () {        a();       if(true){           function a() {               alert("1");           }       }else{           function a() {              alert("2");           }       }}

我們本來想讓if成立的時候彈出1,不成立彈出2

 

但是因為js會預解析,所以永遠都是彈出2;但是使用函數運算式就可以避免這種情況

 

window.onload = function () {       if(true){           var a = function() {               alert("1");           }       }else{           var a = function() {              alert("2");           }       }       a(); }

因為函數運算式不會被預解析,所以會按正常的邏輯進行,自然就彈出的是1

 

 

所以記住: 在寫程式的時候,如果需要根據不同的條件判斷 來決定執行不同的函數,那麼此時一定要用“函數運算式”的形式來定義函數。這樣可以避免很多錯誤發生

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.