2016-09-26 16 views
0

我在Javascript下面的代碼,這和預期一樣:JavaScript的未定義的錯誤隱性的全球

myFunc = n => { 
    for (i = 0; i < n.length; i++) { 
     c = n[i]; 
     if (!k) { 
      k = initialValue 
     } 
    } 
} 

我改變了for環路forEach如下:

myFunc = n => { 
    n.forEach(c => { 
     if (!k) { 
      k = initialValue 
     } 
    }) 
} 

當我嘗試執行此代碼,我收到以下錯誤消息:

ReferenceError: k is not defined 

我是能夠通過添加全局聲明來修復它var k,但我很好奇爲什麼第一組代碼是可以接受的,但forEach不是。

編輯修正這兩個例子中第7行的錯誤。並取消第二個例子。

+1

你能提供一個jsFiddle嗎? – snit80

+0

第一個例子有太多的括號(第7行)是有效的JS。 – TylerY86

+2

對第一行第七行進行更正後運行這兩個示例給出'Uncaught ReferenceError:k is not defined'。 – TylerY86

回答

0

必須是一個變量轉義該網站上的JavaScript沙箱。 :)

myFunc = n => { 
 
    for (i = 0; i < n.length; i++) { 
 
     c = n[i]; 
 
     if (!k) { 
 
      k = initialValue 
 
     } 
 
    } 
 
} 
 

 
try { myFunc([1]) } catch (e) { alert(e) }

myFunc = n => { 
 
    n.forEach(c => { 
 
     if (!k) { 
 
      k = initialValue 
 
     } 
 
    }) 
 
} 
 

 
try { myFunc([1]) } catch (e) { alert(e) }

所有你會得到這裏是ReferenceError: k is not defined

+0

感謝您提供可執行代碼段的反饋。它必定是codefights.com執行環境的一個怪癖。我仍然深入研究javascript,並認爲我遇到了一些奇怪的語言細微差別。下次我會更好地瞭解,而不是僅僅基於一個樣本發佈問題。 – TWacaster

+0

你能在codefights.com上發佈一個代碼鏈接嗎?也許他們在javascript沙箱中有一些暴露的全局變量。您應該將其報告爲一個錯誤。我擺脫了答案頂部的肋骨評論。你也應該在你的問題中提到問題存在的地方。 :) – TylerY86

+0

另外,如果您在打高爾夫球時遇到一些挑戰,弄清楚環境的邊緣可能會很方便地濫用以創建更短的(hackier)代碼。 – TylerY86