Javascript函数,更改变量的值

Javascript函数,更改变量的值,javascript,jquery,setinterval,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值时,我的值是正确的。 但是,如果我尝

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

设置间隔不会返回您的值。在闭包中返回的任何内容都将传递给setInterval。setInterval传递可使用setInterval清除的间隔。另外,你所做的在逻辑上是不正确的。SetInterval不会在每次调用时填充intervalId。它在设置间隔后立即返回

要访问此值,请在闭包内调用函数

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

我想你的意思是
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');
我不知道您的代码的其余部分是什么样子的,但是您可以检查它,它在begging中读取外部的值(太早了,因为您先在600ms之后设置它),然后在4秒之后


我不知道你的
#我的
id是什么,但是在元素
上做
parseInt
。text()
会产生一些错误…

intervalId
指向
setInterval
句柄,你期望的值是什么?与我在console.log(value)上得到的值相同;在第一个代码部分中,您不能这样做,因为它的作用域在匿名函数中。您可以全局声明
,但这样您就不再有关于间隔事件的信息。您试图在这里做什么?您无法获取值,因为传递给setInterval的函数仅在稍后阶段执行。我将尝试在0.6秒后获取标记的值(此标记中仅为整数)。我想把这个值存储在一个变量中,这个变量可以在任何我想访问的地方访问。第二个console.log返回我undefined@user2462805确实如此,因为代码立即执行,并且该值在600毫秒后设置timeout@user2462805是的,是的,只是你找得太快了。检查此示例: