如何从内部引用javascript函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

考虑一下这段代码

var crazy = function() {
    console.log(this);
    console.log(this.isCrazy); // wrong.
}
crazy.isCrazy = 'totally';
crazy();
// ouput =>
// DOMWindow
// undefined

“this”从内部表示窗口,我认为这是有意义的,因为通常您希望它引用函数所附加的对象,但是如何才能让函数引用自身,并访问设置在自身上的属性呢?

答:

不要使用arguments.callee,只需使用一个命名函数。

注意:您应该避免使用arguments.callee(),只需给每个函数(表达式)取一个名称。MDN关于辩论的文章

提问于
用户回答回答于

我想你是找这个,但现在已经废弃了。

https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments/callee

var crazy = function() {
    console.log(this);
    console.log(arguments.callee.isCrazy); // right.
}
crazy.isCrazy = 'totally';
crazy();
// ouput =>
// DOMWindow
// totally
用户回答回答于

正如rfw所说,如果函数有一个单一名称,这是最直接的方法:

var crazy = function() {
    console.log(crazy);
    console.log(crazy.isCrazy);
};

crazy.isCrazy = 'totally';
crazy();

如果它可能有不同的名字,或者你想传递它,它必须包装在一个闭包中:

var crazy = (function(){
    var that = function() {
        console.log(that);
        console.log(that.isCrazy);
    };
    return that;
})();

crazy.isCrazy = 'totally';
crazy();

扫码关注云+社区

领取腾讯云代金券