Javascript函数,改变变量值

时间:2013-08-06 08:38:02

标签: javascript jquery setinterval

我的javascript函数有点问题。 情况如下:

var intervalId = setInterval(function() {
  var value = parseInt($('#my_id').text(), 10);
  if(value > 0) {
    clearInterval(intervalId);
    console.log(value);
  }
}, 600);

当我在console.log中代码的这一部分中的值时,我的值是正确的。 但是如果我在我的函数之外尝试console.log,那么我的变量没有得到正确的值。

var intervalId = setInterval(function() {
  var value = parseInt($('#my_id').text(), 10);
  if(value > 0) {
    clearInterval(intervalId);
    return value;      
  }
}, 600);
console.log(intervalId); //Wrong value here, I want the same result as I got previously

有人可以帮助我在我的职能范围之外获得相同的价值吗?

亲切地,Rob。

2 个答案:

答案 0 :(得分:2)

我认为你在代码的第二部分意味着console.log(value);,无论如何你的问题是你在一个函数中定义变量然后它在那里作为范围,你不能在外面看到它。所以你可以这样做:

var value;
var intervalId = setInterval(function() {
  value = parseInt($('#my_id').text(), 10);
  if(value > 0) {
    clearInterval(intervalId);
    console.log(value + ' inside function');
  }
}, 600);
console.log(value + ' outside function');

我不知道你的代码的其余部分是什么样子,但是你可以检查这个example在乞讨之外读取值(因为你在600ms之后首先设置它)而且在4秒之后。

P.s - 我不知道你的#my_id是什么,对元素parseInt执行.text()可以给出一些错误......

答案 1 :(得分:0)

setInterval不会返回您的值。无论你在闭包内返回什么,都会传递给setInterval。 setInteval传递Interval,可以使用setInterval清除。另外你正在做的事情在逻辑上是错误的。 setInteraval每次调用时都不会填充intervalId。设置间隔后,IT会立即返回。

要访问此值,请调用闭包中的函数

function doSomething(val){console.log(val)};
...
if(value > 0) {
    clearInterval(intervalId);
    doSomething(value);    
  }