从外部函数访问属性

时间:2013-05-20 15:49:44

标签: javascript

我正在尝试按如下方式设置功能。<​​/ p>

function Class() {
}

Class.prototype.func = function(f) {
    var hello = "hello";
    setTimeout(f, 1000);
};

new Class().func(function() {
    alert(hello);
});

我希望f()函数能够访问hello变量。问题是f()未在func()函数的上下文中运行。

我尝试使用var hello = "hello";this.hello = "hello";,但都没有效果。

f()如何访问hello

3 个答案:

答案 0 :(得分:1)

将其作为参数传递

function Class(){
}
Class.prototype.func=function(f){
    var hello="hello";
    setTimeout(function(){
        f(hello)
    },1000);
};
new Class().func(function(hello){
    alert(hello);
});

答案 1 :(得分:0)

它不能。该变量根本不存在于定义函数的范围内。

您需要将其公开到更广泛的范围(例如,将其设为Class对象实例的属性或全局属性。)

答案 2 :(得分:0)

考虑到你所拥有的代码的结构,任何传入“func”的“f”都无法访问“hello”。

然而,你可以这样做:

Class.prototype.func=function(f){
    this.hello="hello";
    setTimeout(f.bind(this),1000);
};
new Class().func(function(){
    alert(this.hello);
});

JavaScript范围基于函数之间的词汇关系(声明上下文)。使用var声明的变量可用于声明它的函数,以及该函数中声明/实例化的所有函数。在您的情况下,匿名函数在“func”中声明为而不是,因此“func”的局部变量永远不可见。无法从“func”内部动态公开本地范围。 (在回答这样的问题时,我通常<罢工>忘记忽略eval(),但在这里我甚至不认为eval()可以解决这种情况。)