【问题标题】:Unable to reset global timer from javascript function无法从 javascript 函数重置全局计时器
【发布时间】:2014-05-02 00:36:49
【问题描述】:

我尝试了各种方法来确保我的计时器变量是全局的(我相信它是全局的)但是为什么我不能清除间隔?

var timer;    

function refreshtimer(timer) {
  stoptimer(timer);
  timer = window.setInterval(postmsg, time*1000);
}

function stoptimer(timer) {
  window.clearInterval(timer);
  timer = null;
}

我相信这是相关的代码部分;但是,完整的代码可以在here找到。

【问题讨论】:

  • 我不明白为什么这个问题被搁置了。代码出了什么问题非常清楚,并且所有必要的代码都被公开了。他们对参数和全局使用相同的变量名,因此从未设置全局,因此stoptimer 从未有机会工作。
  • @jfriend00,下面的方框表明该问题已被搁置,因为它“是由无法再复制的问题或简单的印刷错误引起的”。这对我来说似乎是正确的。
  • @SimonMᶜKenzie - 这不是一个简单的印刷错误,其中 OP 打算输入不同的内容并意外生成了此代码。这段代码是故意这样写的,因为对参数名称如何隐藏对全局变量的访问存在误解。这是一个真正的编程问题,答案是关于它的。为什么不想要合法的编程问题和合法的答案,教一个有用的编程概念来理解?这不是一个错字。这是一个编程错误,答案对此进行了解释/教导。
  • @jfriend00,公平点,但我同意这个问题的解决方式不太可能帮助未来的读者,因为人们在搜索时不太可能找到这个问题对于可变阴影问题 - 也许标题需要重写。
  • @SimonMᶜKenzie - 搜索引擎相关性/准确性是否是将问题标记为离题的标准?我不这么认为,或者这里有超过一半的问题会被认为是题外话。此外,无论如何,大部分搜索引擎相关性都来自我的回答。这并不罕见,因为这些问题描述了症状,通常用模糊的术语和答案往往以更彻底的方式涵盖正在发生的实际问题。我会提出一个更好的标题。

标签: javascript shadowing


【解决方案1】:

您不能对函数的参数和全局变量使用相同的变量名,并且可以同时访问两者。名为 timer 的参数优先,因此您无法访问也名为 timer 的全局变量。

把全局变量的名字改成timerId就可以唯一引用你想引用的那个了。

var timerID;    

function refreshTimer() {
    stopTimer();
    timerID = setInterval(postmsg, time*1000);
}

function stopTimer() {
    clearInterval(timerID);
}

【讨论】:

  • 你可以。除了坏事发生。
  • @bjb568 在结尾处隐含了“并期望事情能够正常工作......”。 :)
  • 我意识到了这一点,但我只是在里面扔了任何我希望它能够发挥作用的东西。我认为删除参数没有帮助,但我会再试一次
  • 好吧,我是个白痴,谢谢你的帮助! :) 我不敢相信它修复了它。我会尽快勾选这个答案
  • 谢谢,现在一切都修复了,程序的其余部分需要单独使用这些功能,但是是的,您不需要调用 stoptimer() :) 但是感谢您的时间,我是坚持了一个半小时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多