了解JavaScript范围

时间:2012-10-14 19:59:15

标签: javascript scope

我正在努力更好地理解JavaScript范围,并且不确定为什么某些东西不起作用。

我已经定义了这样一个对象:

var my_obj =
{
    foo:function()
    {
        this.bar()
    },
    bar:function()
    {
        console.log('hello world!');
    }
}
my_obj.foo();

但我收到错误“TypeError:this.bar不是函数”,我不明白为什么。

我也在尝试使用我之前在这个新块中编写的另一段代码,但这也无法正常工作。这里发生以下情况:

var my_obj =
{
    foo:function()
    {
        feedback('hello world!');
    }
}
my_obj.foo();

feedback = function(msg,y)
{
     if( !y )
     {
         setTimeout(function()
         {
             feedback(msg,1);
         } , 1000 );
         return;
     }
     else
     {
         console.log(msg);
     }
}

这曾经工作正常(如果我在全局范围内调用feedback()),但是现在,反馈在foo中调用很好,但是除非我从中调用window.feedback(),否则超时调用将失败在setTimeout中。

关于这两个问题的任何想法?

由于

更新

这是我的代码(会产生错误):http://jsbin.com/ecotoj/12/edit

感谢Asad向我展示了在$ .ajax中更改'this'的上下文的问题(并且您可以在$ .ajax中使用jQuery的上下文选项来重新定义它)

1 个答案:

答案 0 :(得分:0)

在第二个问题中,您在定义之前调用反馈。在定义my_obj.foo()后尝试拨打feedback。此外,请确保所有这些都发生在全局范围内(因为您尝试引用全局对象feedback