2015-11-03 35 views
-2

我並不是剛剛接觸編程,所以我很困惑爲什麼在給一個var關鍵字聲明的變量賦值之後,我得到一個參考誤差和的函數是「未定義的」。這沒有意義。我聲明總和與var並分配它的值爲0.我創建一個函數,返回數組中的零的數量。以下是我正在爲作業而編寫的代碼片段。我希望有任何建議,請。局部變量是未定義的,雖然我給它賦了一個值javascript

numZero = function (a) { 
    var sum = a[0]; 
    for (var i = 1; i < a.length; i += 1) { 
     if (sum < 1) { 
      sum += a[i]; 
     } 
    } 
    return sum; 
}; 

alert(numZero([2, 8, 0, 0, 1, 4, 0, 1])); 
+1

它[作品(https://jsfiddle.net/tusharj/e275skx0/) – Tushar

+0

的代碼中提到的作品,它顯示了價值2警報 –

+0

你能在jsfiddle上產生你的錯誤嗎? –

回答

0

此代碼運行沒有錯誤,但它並沒有一個數組中返回0的數量。原因是你設置sum爲數組中的第一個元素的值:var sum = a[0]

然後,在for循環中檢查sum是否小於1,在這種情況下它永遠不會是因爲2總是大於1,所以if語句中的代碼永遠不會運行。

最後,即使它確實運行,每次找到零,它都會將0加到sum上,因爲您在做sum += a[i],如果此代碼運行,那麼a[i]應該爲零。

我搞掂你的代碼正常運行:

var numZero = function (a) { 
    var sum = 0; 
    for (var i = 0; i < a.length; i += 1) { 
     if (a[i] === 0) { 
      sum += 1; 
     } 
    } 
    return sum; 
}; 
+0

基本上,sum被設置爲0.然後我們在整個數組的開頭運行for循環 - var i = 0 ;。然後我們檢查當前數組元素的值是否嚴格等於0.如果是,則我們將1加到sum中。如果不是,我們檢查下一個號碼。我沒有做[i] <1的原因是因爲所有的負數都小於1,如果有人使用它們可能會導致不準確的數字。最後我們返回總和。 – Sam

0

首先該函數不會返回數組中零值的數量。可能的總和是未定義的,因爲你傳遞一個空數組作爲參數。 我只注意到你缺少汽車關鍵字在你numZero函數定義

+0

我理解的方式是,當我調用函數時,我的論點就是我所傳遞的。我不明白那可能是空的。這是我的理解。參數位於函數的括號內。參數是我在調用函數時放入函數的內容。但我可能在這裏錯過了一些東西。我有開放的心態去學習。感謝您的建議和幫助。 – swydell

+0

你是在正確的地方,看起來你在numZero定義中缺少了var關鍵字 –

1
numZero = function (a) { 
var sum = 0; 
for (var i = 1; i < a.length; i += 1) { 
    if (a[i] == 0) { 
     sum++; 
    } 
} 
return sum; 
}; 

alert(numZero([2, 8, 0, 0, 1, 4, 0, 1])); 
相關問題