当名称被参数覆盖时,函数访问自身

时间:2011-12-11 22:36:21

标签: javascript

通常,函数可以像这样访问自己:

(function f() {
    console.log(f); // Prints the function definition
}());

但是,当函数f的参数也称为f时,参数优先:

(function f(f) {
    console.log(f); // Prints 1
}(1));

在第二个例子中,当其中一个参数与函数同名时,如何访问该函数?

[另外,我在哪里可以找到文档说该参数应该优先于函数名称?]

3 个答案:

答案 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 ) );