2016-02-05 44 views
5

在瀏覽器控制檯中,如果我鍵入var x=10它顯示undefined,而如果我鍵入x=10它顯示10。兩者執行相同的任務,然後有什麼不同? 我不問使用var和不使用var之間的區別?在瀏覽器控制檯中輸入時,var x = 10和x = 10之間有什麼區別?

+3

沒有...'X = 10'將返回所以10打印在控制檯當你說...'變種X值= 10',沒有值返回,這就是爲什麼undefined'在瀏覽器控制檯 –

回答

3

您在瀏覽器控制檯,讓您身在全球範圍內alerady ,並且有或沒有var對變量的存儲方式沒有影響:

Prove

然而,=是一個運營商其回報就是你分配的價值,所以a = 1將計算爲1,你可以看到一個2當你鍵入b = 2var不返回任何東西,它是一個聲明不是一個表達式。

+1

也許有些參考文獻:[*賦值運行時語義*](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

0

var x = 10;設置當前作用域的值(以函數內部爲例)。

x = 10;設置全局範圍的值,所以無處不在。

+1

我知道,但這並不重要。您也可以使用變量在控制檯內輸入函數。在這種情況下,瀏覽器控制檯範圍與全局範圍相同,因此無關緊要。 –

+0

中打印 – seahorsepip

+0

你錯過了這個問題的要點。 OP詢問爲什麼控制檯在一種情況下用「未定義」響應,而在另一種情況下用「10」響應。 – nnnnnn

0

如果在函數或其他非全局範圍內使用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 
+1

對。除了這個問題是關於爲什麼瀏覽器控制檯打印什麼時,你輸入兩個不同的行*到控制檯*。 – nnnnnn

+0

這不是我所要求的 – Nitin9791

2

說明

情況下x = 10

這將創建一個變量在名爲x的全局範圍內,值爲10。 此外,這是一個表達式,它返回值10。這是有用的,以便能夠做的事情一樣var x = y = 10;設置,使xy的值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 
0
// 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這是不行的,因爲隱含定義全球沒有允許。

+0

OP理解這兩個版本的作用,以及範圍。問題是關於爲什麼當這些行被輸入到控制檯時*控制檯給出了不同的響應。 – nnnnnn

1

方案1:

見基本上當你在瀏覽器控制檯,您得到10,因爲10正在上鍵入X = 10是由瀏覽器控制檯返回一個int值。

場景2: 而當您在瀏覽器控制檯上鍵入var x = 10時,您會看到「未定義」,因爲它顯示每個命令的返回值,並且在此場景中控制檯不返回任何內容。

而且進一步詳細參考訪問這裏:

http://blog.modulus.io/absolute-beginners-guide-to-nodejs

相關問題