2016-02-05 61 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

相关问题