通常,函数可以像这样访问自己:
(function f() {
console.log(f); // Prints the function definition
}());
但是,当函数f
的参数也称为f
时,参数优先:
(function f(f) {
console.log(f); // Prints 1
}(1));
在第二个例子中,当其中一个参数与函数同名时,如何访问该函数?
[另外,我在哪里可以找到文档说该参数应该优先于函数名称?]
答案 0 :(得分:4)
你没有。只需按照这个简单的规则
不要在任何要使用的变量上隐藏(或在更具体的范围内重新声明)。
注意:arguments.callee
适用于此,但仅适用于某些实现。它实际上是分阶段 out ,很可能在将来完全消失。
答案 1 :(得分:1)
关于:
[另外,我在哪里可以找到说明该论点的文件 应该优先于函数名称?]
JavaScript是lexically/statically scoped。以下代码包含两个标识符:
(function f(f) {
console.log(f); // Prints 1
}(1));
f
的函数(可使用window.f
)f
的全局函数的参数,该函数本身名为f
。此参数的作用域是函数,该函数是一个比外部作用域更具体的作用域。换句话说,它不需要任何特殊规则来使参数优先;本地/内部/更具体的范围总是影响外部/不太具体的范围。答案 2 :(得分:0)
你可以在函数内使用arguments.callee而不使用它的名字。
( function f( f ) {
console.log( f ); // Prints 1
console.log( arguments.callee ); // Prints the function definition
}( 1 ) );