Javascript SetInterval() 范围问题

发布于 2024-11-18 18:45:55 字数 325 浏览 2 评论 0原文

我用 javascript 编写了一个类,如下所示:

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n =1;
        window.setInterval(document.write(this.n++),1000);
    }
}

但是在调用 setInterval() 后,“this”引用了 window.setInterval() 。所以我无法访问类内的变量。我该如何解决这个范围问题?

I wrote a class in javascript that looks like this:

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n =1;
        window.setInterval(document.write(this.n++),1000);
    }
}

But after calling setInterval() 'this' refers to window. So i cannot access the variable inside the class. How can I solve this scope problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

独夜无伴 2024-11-25 18:45:55
function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write(n++); },1000);
    }
}

请注意,您的代码包装在 function 中。

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write(n++); },1000);
    }
}

Notice that your code is wrapped in function.

遥远的她 2024-11-25 18:45:55

首先,您的 setInterval 没有按照您的想法进行。您正在对 document.write(this.n++)结果执行 setInterval。写入会立即发生,并且只会触发一次。

代码应该是:

setInterval(function(){
    document.write(n++);
}, 1000);

setInterval 接受一个函数每n 毫秒执行一次。函数的范围可以访问您的 n 变量,因此您不需要 this

First of all, your setInterval isn't doing what you think. You're doing a setInterval on the result of document.write(this.n++). The write happens immediately and will only ever fire once.

Code should be:

setInterval(function(){
    document.write(n++);
}, 1000);

setInterval takes a function to execute every n ms. The scope of the function has access to your n variable, so you don't need a this

笔落惊风雨 2024-11-25 18:45:55
function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write( t.n++); },1000);
    }
}

您已经声明了t,请使用它!所有的人都是正确的,使用函数语句,但是要在范围内保持n,请使用t

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write( t.n++); },1000);
    }
}

You already declared t, use it! All guys are correct, use the function statement, but to mantain n in the scope use t.

简单气质女生网名 2024-11-25 18:45:55

document.write...现在那是老派了。尝试使用 document.write(main.n++) 来代替?

document.write.... now that's old school. Try document.write(main.n++) instead?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文