在this教程中有記載:重新聲明JavaScript變量
If you redeclare a JavaScript variable, it will not lose its value.
爲什麼我要重新聲明一個變量?在某些情況下是否實用?
謝謝
在this教程中有記載:重新聲明JavaScript變量
If you redeclare a JavaScript variable, it will not lose its value.
爲什麼我要重新聲明一個變量?在某些情況下是否實用?
謝謝
這無非就是一個提醒,如果你這樣做:
var x=5;
var x;
alert(x);
結果將是5
如果你在其他一些語言重新聲明變量例如 - 結果將是未定義的,或NaN,但不是在JavaScript中。
有趣。當我嘗試重新聲明一個類時,我得到同樣的錯誤。我有一個帶有通用說話功能的Animal類,看起來像'console.log(this.name +'發出聲音。')'。當然,在我宣佈它之後,我意識到'make'在引號和單詞之間需要一個空格。所以我導航到入口,相應地修正它,並重新提交,認爲新的聲明會覆蓋以前的聲明。顯然,這不是JavaScript的工作原理。那麼我該如何處理這個問題呢? – Musixauce3000
爲什麼要重新聲明變量?
您不應該。它使代碼混淆。
它在某些情況下是否實用?
號
你的回答非常好,但我只能選擇一個接受。 – xralf
這更像是無意或無意地重新聲明變量。 – Adnan
如果我在一個函數中有兩個沒有嵌套的循環,並且聲明的'var i = 0'僅在循環中使用,那麼爲什麼我應該爲第二個循環創建另一個名稱?所以這是至少一個例子,其中可變重新聲明是實用的,我認爲 – user907860
在javascript中沒有塊範圍,從而可取的是重新聲明的變量爲清楚的目的;這使得更好的代碼。
例如:
for (var x=0; x< 100; x++) { }
alert(x); //In most languages, x would be out of scope here.
//In javascript, x is still in scope.
//redeclaring a variable helps with clarification:
var x = "hello";
alert(x);
重新聲明一個變量的一個例子可以在Google Analytics找到。當JavaScript跟蹤代碼是由谷歌Analytics(分析)腳本開始,它聲明或以這種方式redeclares _gaq
:
var _gaq = _gaq || [];
換句話說,如果_gaq
已經定義,_gaq
是「重新聲明」的本身。如果沒有定義,它將首次被聲明爲空數組。
這允許Google Analytics(分析)跟蹤代碼支持在啓動Google Analytics代碼之前可能需要使用該變量的其他腳本。正如@xralf指出的那樣,JavaScript允許這樣做。
如果變量已被定義,重新標識變量很有用。
通過像Google Analytics(分析)跟蹤代碼那樣有條件地重新聲明變量,它允許變量安全地從多個位置發起。
在這個例子中,使用_gaq
變量的其他代碼也可以安全地檢查預定義的_gaq
變量。如果存在,它知道它可以使用它。如果它不存在,它知道它應該在嘗試使用它之前定義它。
非常好的答案,+1,特別是關於允許a變量「可以安全地從多個地方發起」。當你將JS塊重構爲單獨的文件並希望能夠根據需要使用小塊和塊時,它有助於完成你在'_gaq'示例中提到的內容(可怕的變量名稱,不過,不是嗎? ?)。 –
一般來說,由於吊裝問題(see here),在其他語句後面分配var
可以認爲是不好的風格。使用「單變量模式」(see here),重新聲明只能發生在Steve Oliver的Google Analtyics示例中。我重構上面的例子:
var x, max = 100; // no further var declarations afterwards!
for (x = 0; x < max; x++) { }
alert(x);
// redeclaration 'var x = "hello"' doesn't make any sense here
// and would be complained about by JSLint/-Hint
x = 'hello';
alert(x);
一個重聲明可以使用默認值然而,當可選參數的意義(這是谷歌分析的例子是什麼,我認爲):
function abc(param1) {
var param1 = param1 || 'default value';
}
它不會失去它的價值,因爲Hoisting
var x = 5;
var x;
// this is same as
var x; // undefined;
x = 5;
所以,當你說:「如果你一個重新聲明的javascrip t變量,它不會失去它的價值。「
根據提升,聲明全部移到頂端。 然後變量被賦值。
var x = 25;
var x; // redeclare first time
var x; // redeclare second time
// is same as
var x; // undefined
var x; // Not sure if this happens, but doesn't make a difference, it's still undefined
x = 25;
至於實用性,有時會發生。看@steveoliver的答案。
http://w3fools.com/ – Quentin