-1

我对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

任何人都可以帮我在我的功能之外获得相同的价值吗?

亲切地,罗布。

4

2 回答 2

3

我认为您的意思是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');

我不知道你的代码的其余部分是什么样子,但你可以检查这个例子,它在乞讨中读取外面的值(太早了,因为你在 600 毫秒后首先设置它)和 4 秒后。

Ps - 我不知道你的#my_id, burparseInt在元素上做什么.text()会产生一些错误......

于 2013-08-06T08:44:21.330 回答
0

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

要访问此值,请在闭包中调用一个函数

function doSomething(val){console.log(val)};
...
if(value > 0) {
    clearInterval(intervalId);
    doSomething(value);    
  }
于 2013-08-06T08:44:12.777 回答