<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    函數聲明 VS 函數表達式(轉)

    Posted on 2013-12-28 15:16 瘋狂 閱讀(1575) 評論(0)  編輯  收藏

    轉自:http://www.libuchao.com/2012/06/25/function-declaration-vs-function-expression
    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() {}undefinedfunction foo() {}function bar_fn() {}

    可以看到 foo 的聲明是寫在 alert 之后,仍然可以被正確調用,因為 JavaScript 解釋器會將其提升到 alert 前面,而以函數表達式創建的函數 bar 則不享受此待遇。

    那么bar 究竟有沒有被提升呢,其實用 var 聲明的變量都會被提升,只不過是被先賦值為 undefined 罷了,所以第二個 alert 彈出了 undefined

    所以,JavaScript 引擎執行以上代碼的順序可能是這樣的:

    1. 創建變量 foobar,并將它們都賦值為 undefined
    2. 創建函數 foo 的函數體,并將其賦值給變量 foo
    3. 執行前面的兩個 alert。
    4. 創建函數 bar_fn,并將其賦值給 bar
    5. 執行后面的兩個 alert。

    注:

    嚴格地說,再 JavaScript 中創建函數的話,還有另外一種方法,稱為“函數構造法”:

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

    此方法以一個字符串作為參數形成函數體。但是用這種方法,執行效率方面會打折扣,且似乎無法傳遞參數,所以少用為妙。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产在线观看免费视频软件 | 一级特黄aaa大片免费看| 99亚偷拍自图区亚洲| 亚洲精品国产电影午夜| 亚洲一区二区三区夜色| 亚洲av无码国产精品色午夜字幕| 综合亚洲伊人午夜网| 亚洲人成伊人成综合网久久久| 伊人久久大香线蕉亚洲五月天| 国产日产亚洲系列最新| 夜夜春亚洲嫩草影院| 国产AV无码专区亚洲AV毛网站 | 99精品免费视品| 在线观看肉片AV网站免费| 中文无码成人免费视频在线观看| 国产午夜无码精品免费看 | 亚洲日本人成中文字幕| 亚洲日日做天天做日日谢| 亚洲欧美成人一区二区三区| 在线观看亚洲网站| 日韩精品无码永久免费网站| 中文字幕乱理片免费完整的| 国偷自产一区二区免费视频| 最近免费mv在线电影| 日韩一区二区a片免费观看| 女人18毛片免费观看| 亚洲成a人片在线观看日本麻豆| 综合亚洲伊人午夜网| 亚洲黄色网址大全| 亚洲欧美日韩中文无线码| 看Aⅴ免费毛片手机播放| 久久99久久成人免费播放| 免费观看在线禁片| 麻豆视频免费播放| 国产麻豆免费观看91| 国产亚洲精品影视在线产品| 亚洲精品国产成人99久久| 亚洲六月丁香婷婷综合| 污视频网站免费在线观看| 中文字幕无码免费久久| 国内免费高清在线观看|