[英]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
編輯:
為什么不重命名參數/函數?
編輯:
在上述情況下,我正在尋找一種在其自身內部引用 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.