2013-08-06 83 views
-1

我有一個JavaScript函數的小問題。 這裏的情況: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 

任何人都可以幫助我在我的功能之外獲得相同的價值嗎?

親切地說,羅布。

+0

'intervalId'是指向'setInterval'處理,什麼樣的價值,你期待? – Halcyon

+0

與console.log(value)相同的值;在第一個代碼部分 – user2462805

+2

你不能,因爲它的作用域在匿名函數中。你可以在全局聲明'value',但是你不再有關於間隔事件的信息。你想在這裏做什麼? – Halcyon

回答

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秒後。

詩 - 我不知道你是什麼#my_id,鑽做一個元素parseInt.text()可以給一些錯誤......

+0

第二個console.log返回我undefined – user2462805

+1

@ user2462805它的確,因爲代碼立即執行,並且值設置在600ms之後timeout – MythThrazz

+0

@ user2462805,是的,它確實只是你正在尋找它太快。檢查這個例子:http://jsfiddle.net/Ju6PV/ – Sergio

0

setInterval不會返回您的值。無論你在閉包中返回什麼,都傳遞給setInterval。 setInteval傳遞可以使用setInterval清除的間隔。另外你在做什麼是邏輯上不正確的。每次調用setInteraval時都不會填充intervalId。 IT在設置間隔後立即返回。

要訪問這個值,請與瓶蓋內的功能

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