作爲destroy pointed out,您得到語法錯誤的原因是(自動分號插入無法正確糾正代碼),顯式添加分號很重要。
但約的x
行爲主場迎戰arguments
僞數組問題的肉:
在鬆散模式(默認),還有就是命名參數和arguments
僞陣列之間的聯繫。下面是鏈接的一個更好的示範:
function foo(x) {
snippet.log(x); // "one"
snippet.log(arguments[0]); // also "one"
x = "two";
snippet.log(x); // "two"
snippet.log(arguments[0]); // also "two"
arguments[0] = "three";
snippet.log(x); // "three"
snippet.log(arguments[0]); // also "three"
}
foo("one");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
瞭解如何arguments[0]
和x
基本上是相互的同義詞。
您參考教程似乎相信轉移的arguments
僞陣列(除去第一項)將使x
undefined
因爲arguments[0]
將undefined
在這一點上。雖然這將對名稱爲x
和arguments
僞陣列之間的鏈接進行合理解釋,但在Chrome的V8,Firefox的SpiderMonkey,IE11的JScript甚至IE8的較舊版本的JScript上都不是這樣。
在嚴格的模式下,命名參數和arguments
僞陣列之間的鏈接不存在:
function foo(x) {
"use strict";
snippet.log(x); // "one"
snippet.log(arguments[0]); // also "one"
x = "two";
snippet.log(x); // "two"
snippet.log(arguments[0]); // "one" again, it wasn't changed
arguments[0] = "three";
snippet.log(x); // "two" again, it wasn't changed
snippet.log(arguments[0]); // "three"
}
foo("one");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
在一般情況下,最好使用嚴格模式,並即使在鬆散模式代碼中也不依賴鏈接。
'Uncaught SyntaxError:Unexpected token]' – 2014-11-03 11:06:16
@James,I added;但它提醒1兩次而不是1,並且未定義。 – bean 2014-11-03 11:08:58
該教程是垃圾。我可以通過警告的使用和缺少分號來判斷。有關更多JavaScript資源,請參閱MDN。 – 2014-11-03 11:09:11