在瀏覽器控制檯中,如果我鍵入var x=10
它顯示undefined
,而如果我鍵入x=10
它顯示10
。兩者執行相同的任務,然後有什麼不同? 我不問使用var和不使用var之間的區別?在瀏覽器控制檯中輸入時,var x = 10和x = 10之間有什麼區別?
回答
您在瀏覽器控制檯,讓您身在全球範圍內alerady ,並且有或沒有var對變量的存儲方式沒有影響:
然而,=
是一個運營商其回報就是你分配的價值,所以a = 1
將計算爲1,你可以看到一個2
當你鍵入b = 2
。 var
不返回任何東西,它是一個聲明不是一個表達式。
也許有些參考文獻:[*賦值運行時語義*](http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation ) - 分配表達式返回右手的值。 [*變量聲明運行時語義*](http:// www。ecma-international.org/ecma-262/6.0/#sec-variable-statement-runtime-semantics-evaluation) - 如果成功,則返回* undefined *。 – RobG
var x = 10;設置當前作用域的值(以函數內部爲例)。
x = 10;設置全局範圍的值,所以無處不在。
我知道,但這並不重要。您也可以使用變量在控制檯內輸入函數。在這種情況下,瀏覽器控制檯範圍與全局範圍相同,因此無關緊要。 –
中打印 – seahorsepip
你錯過了這個問題的要點。 OP詢問爲什麼控制檯在一種情況下用「未定義」響應,而在另一種情況下用「10」響應。 – nnnnnn
如果在函數或其他非全局範圍內使用var,那麼該變量不是全局變量。如果在變量名稱之前沒有使用var,那麼您已經創建了一個全局變量。
/
/ These are both globals
var foo = 1;
bar = 2;
function()
{
var foo = 1; // Local
bar = 2; // Global
// Execute an anonymous function
(function()
{
var wibble = 1; // Local
foo = 2; // Inherits from scope above (creating a closure)
moo = 3; // Global
}())
}
如果你不這樣做的任務,那麼你需要使用VAR:
var x; // Declare x
說明
情況下x = 10
:
這將創建一個變量在名爲x
的全局範圍內,值爲10
。 此外,這是一個表達式,它返回值10
。這是有用的,以便能夠做的事情一樣var x = y = 10;
設置,使x
和y
的值10
情況下var x = 10
:
這會在當前範圍,這恰好是 變量全球範圍,名稱爲x
,值爲10
。由於它是使用var
語法創建的,因此它不能作爲表達式求值,因此它會返回undefined
,它將打印到控制檯。
摘要
有書面var x = 10
VS x = 10
從控制檯的效果沒有區別,雖然會有在其他地方。後者在嚴格模式下也是不允許的。但是第一個返回undefined
,因爲運行時沒有輸出,但第二個返回10
,因爲x=10
是一個表達式。
例
你可以看到正在發生的事情更好一點,如果你使用eval
var output = eval('x = 10');
console.log(output) // 10
VS
var output = eval('var x = 10');
console.log(output) // undefined
// they both define var x and set it value to 10,but they are diff about below
// x is globally
x = 10
// x is scopely
var x = 10
在瀏覽器ENV,全球平均VAR是定義爲對象window
的財產
但要小心使用的第一個代碼,它可能會導致全局定義變量。
如果它在strict mode
,這是不行的,因爲隱含定義全球沒有允許。
OP理解這兩個版本的作用,以及範圍。問題是關於爲什麼當這些行被輸入到控制檯時*控制檯給出了不同的響應。 – nnnnnn
方案1:
見基本上當你在瀏覽器控制檯,您得到10,因爲10正在上鍵入X = 10是由瀏覽器控制檯返回一個int值。
場景2: 而當您在瀏覽器控制檯上鍵入var x = 10時,您會看到「未定義」,因爲它顯示每個命令的返回值,並且在此場景中控制檯不返回任何內容。
而且進一步詳細參考訪問這裏:
- 1. JavaScript中的'var $ x'和'var x'有什麼區別?
- 2. 過濾器(| x |)和過濾器(|&x |)之間有什麼區別?
- 3. $('x> y'),$('y','x')和$('x y')之間有什麼區別?
- 4. {$ var}和$ var之間有什麼區別?
- 5. 讓利之間創建一個函數x = 10和X <時有什麼區別 - 在Haskell
- 6. num = + 10和num + = 10有什麼區別?
- 7. Byte.decode(「10」)和Byte.valueOf(「10」) - 有什麼區別?
- 8. 在python 2.7「x!= y」和「not x == y」之間有什麼區別?
- 9. 演員之間有什麼區別:(A)x和x爲A?
- 10. IsNull(x)和x =「」之間有區別嗎?
- 11. C++:int * x [5]和int(* x)[5]之間有什麼區別?
- 12. int [] x;有什麼區別?和int x [];?
- 13. (void **)&x和(void *)x有什麼區別?
- 14. C中「* x = 1」和「x = 1」之間的區別是什麼?
- 15. 在Objective-C中Type * var和Type * var之間有什麼區別?
- 16. 「x!」有什麼區別和「x」?
- 17. 'x'和'x'有什麼區別?
- 18. SQL Native Client和SQL Native Client 10之間有什麼區別?
- 19. Angular 1.X和2.X之間的區別是什麼
- 20. 在JavaScript中,typeof x =='y'和typeof x ==='y'之間有什麼區別嗎?
- 21. Android和Chrome瀏覽器之間的Chrome有什麼區別?
- 22. Rails 1.X和2.X之間的主要區別是什麼
- 23. * x = i和x =&i之間的區別是什麼
- 24. null == x和x == null之間的區別?
- 25. Java:格式說明符%x和%h之間有什麼區別?
- 26. int * x []和int(* x)[]之間的區別?
- 27. SproutCore 1.x和2.0之間有什麼區別?
- 28. JavaScript中10/5和10%5有什麼區別?
- 29. 在Firefox中,Web控制檯和瀏覽器控制檯的區別
- 30. Skript和控制檯之間的區別
沒有...'X = 10'將返回所以10打印在控制檯當你說...'變種X值= 10',沒有值返回,這就是爲什麼undefined'在瀏覽器控制檯 –