2015-08-19 56 views
1

嗨,我試着做一些計算如下。變量在JavaScript本地函數中沒有得到值

重量值應該從分數中減去它的值。但是當我這樣做時,我得到了「undefined」作爲score變量輸出。是什麼原因?我是否正確處理變量聲明?

var score = 10; 

var scoresFunc = function (weight) { 
    console.log(score); 
    var finalScore = score - weight; 
    score = score - finalScore; 
    var scoreForStartingDate = $('#scoreForStartingDate').val(); 
    var scoreForDuration = $('#scoreForDuration').val(); 
    var scoreForProjects = $('#scoreForProjects').val(); 

    var score = score - parseInt(weight); 
    var a = ''; 
    for (i = 1; scores >= i; i++) { 
     a += "<option value='" + i + "'>" + i + "</option>"; 
    } 
    return a; 
}; 
+0

你在哪裏得到未定義? –

+1

完全提到錯誤,而不是說只是'undefined' –

+0

請參閱控制檯日誌。分數變量給了undefined – GRTZ

回答

0

使用parseFloatparseInt

var finalScore = Number(parseFloat(score) - parseFloat(weight)); 
1

在這裏:var score = score - parseInt(weight); 重新定義變量得分,所以也許它首先引起操作者變得不確定...

也提防循環,你使用分數而不是分數

+0

不,我想讓值10進入函數。這就是爲什麼我把這樣的 – GRTZ

+0

男人是這樣的,我測試它,它工作正常,...只是找到該行,並刪除'var',當你重新定義相同的變量你casue局部變量引用該對象。所以它們變得沒有定義,刪除'var'並且每件事都會好的。寫這個,而不是:'score = score - parseInt(weight);' – deadManN

1

var score你有你的func重刑可能會讓事情變得糟糕。請記住,ALL var定義會自動提升到其功能範圍的最頂端。這意味着你的函數是這相當於:

var scoresFunc = function (weight) { 
    var score, scoreForStartingDate, scoreForDuration, scoreForProjects, a; 
    console.log(score); 
    var finalScore = score - weight; 
    score = score - finalScore; 
    scoreForStartingDate = $('#scoreForStartingDate').val(); 
    scoreForDuration = $('#scoreForDuration').val(); 
    scoreForProjects = $('#scoreForProjects').val(); 

    score = score - parseInt(weight); 
    a = ''; 
    for (i = 1; scores >= i; i++) { 
     a += "<option value='" + i + "'>" + i + "</option>"; 
    } 
    return a; 
}; 

所以,因爲你有一個var score裏面的功能,那麼這將覆蓋全球範圍內的名稱和score任何引用將使用本地變量。

因此,該行:

score = score - parseInt(weight); 

將是這樣的:

score = undefined - parseInt(weight); 

這顯然是行不通的。


我不確切地知道你要在這個功能中完成什麼。也許你只需要刪除var這行:

var score = score - parseInt(weight); 

讓您在較高的操作作用域確定score變量,而不是局部變量。

5

你看到的console.log(得分)未定義記錄的原因是,因爲一些所謂的variable hoistingMDN

var score = 10; 
var scoresFunc = function (weight) { 
    console.log(score); 
    var score = score - weight; 
}; 

這是所示函數的精簡版。然而,隨着提升的結果,它實際上是這個

var score = 10; 
var scoresFunc = function (weight) { 
    var score; 
    console.log(score); 
    score = score - weight; 
}; 

其中應該有希望搞清楚爲什麼你登錄undefined

+0

不,我想讓值10進入函數。這就是爲什麼我這樣說 – GRTZ

+1

@GRTZ - 使用單獨的變量名稱。您正在覆蓋函數範圍中的變量。 –

相關問題