在浏览器控制台中input时,var x = 10和x = 10有什么区别?
在浏览器控制台中,如果我键入var x=10
它显示undefined
而如果我键入x=10
它显示10
。 两者执行相同的任务,然后有什么区别? 我不是要求区别使用var和不使用var?
你在浏览器控制台,所以你是在全球范围alerady,有或没有variables没有变化如何存储没有区别:
但是, =
是一个返回值的操作符,所以a = 1
将计算为1,当您键入b = 2
时,您会看到a b = 2
。 var
不返回任何东西,它是一个语句不是一个expression式。
说明
情况x = 10
:
这将在名为x
的全局范围中创build一个值为10
的variables。 此外,这是一个expression式,它返回值10
。 这是有用的,以便能够做的事情,如var x = y = 10;
它将x
和y
设置为10
案例var x = 10
:
这会在当前范围内创build一个variables,这恰好是全局范围,名为x
,值为10
。 因为它是用var
语法创build的,所以它不能作为一个expression式来计算,所以它返回undefined
,这会被打印到控制台。
概要
虽然在其他地方会出现,但从控制台写入var x = 10
vs x = 10
效果没有区别。 后者在严格模式下也是不允许的。 然而,第一个返回undefined
因为运行时,没有输出,但是第二个返回10
因为x=10
是一个expression式。
例
如果您使用eval
您可以看到发生了什么好一点
var output = eval('x = 10'); console.log(output) // 10
VS
var output = eval('var x = 10'); console.log(output) // undefined
情况1:
在浏览器控制台上inputx = 10时,基本上可以看到10,因为10是一个由浏览器控制台返回的int值。
情景2:当你在浏览器控制台inputvar x = 10时,你会得到“未定义”,因为它显示了每个命令的返回值,在这种情况下控制台不返回任何东西。
并进一步欲了解更多参考访问这里:
var x = 10; 设置当前范围的值(以函数内部为例)。
x = 10; 设置全局范围的值,所以无处不在。
如果在函数或其他非全局范围内使用var,则该variables不是全局variables。 如果在variables名之前没有使用var,那么你已经创build了一个全局variables。
/
/ 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
// 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
的属性
但要小心使用第一个代码,它可能会导致全局定义variables。
如果它在strict mode
, 这将无法正常工作 ,因为隐式定义的全局是不允许的。