程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解JavaScript中的函數聲明和函數表達式

詳解JavaScript中的函數聲明和函數表達式

編輯:關於JAVA

詳解JavaScript中的函數聲明和函數表達式。本站提示廣大學習愛好者:(詳解JavaScript中的函數聲明和函數表達式)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解JavaScript中的函數聲明和函數表達式正文


JavaScript 中須要創立函數的話,有兩種辦法:函數聲明、函數表達式,各自寫法以下:

// 辦法一:函數聲明

function foo() {}


// 辦法二:函數表達式
var foo = function () {};

別的還有一種自履行函數表達式,重要用於創立一個新的感化域,在此感化域內聲明的變量不會和其它感化域內的變量抵觸或混雜,年夜多是以匿名函數方法存在,且立刻主動履行:

(function () {
  // var x = ...
})();

此種自履行函數表達式歸類於以上兩種辦法的第二種,也算是函數表達式。

辦法一和辦法二都創立了一個函數,且定名為 foo,然則兩者照樣有差別的。JavaScript 說明器中存在一種變量聲明被晉升(hoisting)的機制,也就是說變量(函數)的聲明會被晉升到感化域的最後面,即便寫代碼的時刻是寫在最初面,也照樣會被晉升至最後面。

例如以下代碼段:

alert(foo); // function foo() {}
alert(bar); // undefined
function foo() {}
var bar = function bar_fn() {};
alert(foo); // function foo() {}
alert(bar); // function bar_fn() {}

輸入成果分離是function foo() {}、undefined、function foo() {}和function bar_fn() {}。

可以看到 foo 的聲明是寫在 alert 以後,依然可以被准確挪用,由於 JavaScript 說明器會將其晉升到 alert 後面,而以函數表達式創立的函數 bar 則不享用此待遇。

那末bar 畢竟有無被晉升呢,其適用 var 聲明的變量都邑被晉升,只不外是被先賦值為 undefined 而已,所以第二個 alert 彈出了 undefined。

所以,JavaScript 引擎履行以上代碼的次序能夠是如許的:

  •     創立變量 foo 和 bar,並將它們都賦值為 undefined。
  •     創立函數 foo 的函數體,並將其賦值給變量 foo。
  •     履行後面的兩個 alert。
  •     創立函數 bar_fn,並將其賦值給 bar。
  •     履行前面的兩個 alert。

注:

嚴厲地說,再 JavaScript 中創立函數的話,還有別的一種辦法,稱為“函數結構法”:

var foo = Function('alert("hi!");');
var foo = new Function('alert("hi!");'); // 同等於下面一行

此辦法以一個字符串作為參數構成函數體。然則用這類辦法,履行效力方面會打扣頭,且仿佛沒法傳遞參數,所以罕用為妙。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved