簡體   English   中英

Function 名稱被該函數的參數名稱遮蔽

[英]Function name shadowed by that function's parameter name

警告:ECMAScript (ES5) 第 5 版禁止在嚴格模式下使用 arguments.callee()。 避免使用 arguments.callee() 給 function 表達式一個名稱或使用 function 聲明,其中 function 必須調用自身。 [ MDN ]

在以下情況下,如何在自身內部引用o function

function o(o) { o(); }
o('not a function'); // TypeError: o is not a function

編輯:

為什么不重命名參數/函數?

  1. 我正在調試數千個混淆的 JavaScript 代碼文件。
  2. 我個人的看法是,這個問題應該可以通過反思來避免,而不是通過重構。

編輯:

在上述情況下,我正在尋找一種在其自身內部引用 function 的方法,或者尋找一種解釋或對可靠來源的引用,說明參數名稱為何隱藏 function 名稱

將參數命名為另一個已聲明變量的名稱,使其成為 function 中的值。它會忽略其他聲明並使用參數中的聲明。 最好的辦法是重命名它,但如果它在全局 scope 中,則可以使用window (僅限 HTML 文檔)訪問它。 只需鍵入window.functionName()正確引用。 這僅在使用var關鍵字在全局 scope 中定義時才有效!

 //global scope var a = 1 function b(a) { console.log(a) console.log(window.a) } b(2) //2 and then 1 function o(o) { console.log(++a) if(a < 5) window.o() //calls o() from global scope } o()

o function 的參數 o 不是字符串。 它應該是對任何 function 或 function 名稱的引用。

function a() { console.log('a function'); }
function o(o) { console.log('o function'); o(); }
o(a); 
// o function
// a function

使用shift-refactor來實現明顯的( rename )解決方案,因為我沒有找到另一個解決方案:

$source('FunctionDeclaration,FunctionExpression').forEach(fd => {
  if(fd.name)
  {
    for (let param of fd.params.items) {
      if (param.name === fd.name.name) {
        $source(param).rename('randomParameterName');
        break;
      }
    }
  }
});

暫無
暫無

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

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