簡體   English   中英

在javascript中的“var new_function = function name(){};”中定義函數名是否有任何優勢?

[英]Is there any advantage to define function name in “var new_function = function name(){};” in javascript?

我正在運行一個程序來改變我的javascript代碼的某些部分,當它在var的聲明中作為一個像這樣的函數的bug:

var some_function = function name(args){
//do stuff
};

代碼本身有效,但我只是想知道是否可以刪除我發現的所有函數的“名稱”(因為它不會在分析我的javascript的其他問題中破壞它)或者它是否可以是用它,我看不到。

刪除“名稱”:

var new_function = function(){/*do stuff*/};

注意:首次出現的原始文件位於jquery-1.6.4.js中:

jQuerySub.fn.init = function init( selector, context ) {
    if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
        context = jQuerySub( context );
    }

    return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
};

ty提前任何幫助:)

函數表達式的name標識符只能在函數本身中訪問。

在你的jQuery示例中,甚至沒有使用init標識符,所以我認為將函數命名為調試目的的唯一優勢是,調試器將能夠在一長串調用中顯示函數名稱。

相比:

堆棧上的匿名函數

比。

堆棧上的命名函數

存在缺點,IE <= 8上的長期錯誤使命名函數表達式將名稱標識符泄漏到其封閉范圍,此外,創建兩個函數對象,例如:

var foo = function bar() {}; 

typeof bar; // "function" on IE
foo === bar; // false, two different objects

為避免此錯誤的副作用,有幾種解決方法,例如,在立即調用的函數內部工作,在該范圍內創建函數聲明,並返回它,例如:

jQuerySub.fn.init = (function () {
  function init( selector, context ) {
    //...
  }

  return init;
})();

和其他類似的方法,我建議你查看以下文章:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM