Javascript 在浏览器控制台中键入var x=10和x=10之间有什么区别?
在浏览器控制台中,如果我键入Javascript 在浏览器控制台中键入var x=10和x=10之间有什么区别?,javascript,node.js,Javascript,Node.js,在浏览器控制台中,如果我键入var x=10则显示未定义,而如果我键入x=10则显示10。两者执行相同的任务,那么有什么区别? 我不是在问使用var和不使用var之间的区别?VarX=10;设置当前作用域的值(以函数内部为例) x=10;设置全局范围的值,以便在任何地方都可以访问。如果在函数或其他非全局范围内使用var,则该变量不是全局变量。如果变量名之前未使用var,则您已经创建了一个全局变量 / 如果您没有进行赋值,则需要使用var: var x; // Declare x 解释 案例x=
var x=10
则显示未定义
,而如果我键入x=10
则显示10
。两者执行相同的任务,那么有什么区别?
我不是在问使用var和不使用var之间的区别?VarX=10;设置当前作用域的值(以函数内部为例)
x=10;设置全局范围的值,以便在任何地方都可以访问。如果在函数或其他非全局范围内使用var,则该变量不是全局变量。如果变量名之前未使用var,则您已经创建了一个全局变量 / 如果您没有进行赋值,则需要使用var:
var x; // Declare x
解释
案例x=10
:
这将在全局范围内创建一个名为x
的变量,其值为10
。
此外,这是一个表达式,返回值10
。这对于能够执行诸如var x=y=10
将x
和y
设置为10
案例var x=10
:
这将在当前范围内创建一个变量,恰好是
全局范围,名为x
,值为10
。因为它是用
语法var
,它不能作为表达式计算,因此它返回未定义的
,并打印到控制台
总结
从控制台写入var x=10
与x=10
的效果没有差别,尽管在其他地方也会有差别。严格模式下也不允许使用后者。但是,第一个返回undefined
,因为运行时没有输出,而第二个返回10
,因为x=10
是一个表达式
// 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
范例
如果使用eval
var output = eval('x = 10');
console.log(output) // 10
vs
您在浏览器控制台中,因此您在全局范围内是alerady,有无var对变量的存储方式没有影响: 但是,
=
是一个运算符,它返回您指定的值,因此a=1
将计算为1,当您键入b=2
时,您将看到a2
var
不要返回任何内容,它是一条语句而不是一个表达式
// 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被定义为对象窗口的属性
但请注意使用第一个代码,它可能导致全局定义变量。
如果它处于严格模式
,这将不起作用,因为隐式定义的全局是不允许的。场景1:
基本上,当您在浏览器控制台上键入x=10时,您得到的是10,因为10是浏览器控制台返回的int值
情景2:
当您在浏览器控制台上键入var x=10时,您将得到“未定义”,因为它显示每个命令的返回值,并且在这种情况下,控制台不会返回任何内容
如需更多参考,请访问:
除了上述内容之外,还有更多关于差异的信息:
var x=10;
x=10;
在创建的属性描述符方面存在差异
当您写入var x=10时
您无法删除x
,因为此x
configurable将为false
另一方面,x=10
您可以删除x
,因为此x
e、 g
打开新浏览器控制台不要在同一控制台中写入以下语句,否则它将使用以前使用过的相同语句,并将使用相同的属性描述符,即可配置false
a="Deletable";
delete a;//Prints true
console.log(a);//Reference error..a is not defined
没什么x=10
将返回值,因此10将在控制台中打印。。。当您说var x=10
时,不会返回任何值,这就是为什么打印未定义的
,我知道,但这并不重要。您还可以在控制台内使用变量输入函数。在这种情况下,浏览器控制台作用域与全局作用域相同,因此这无关紧要。您没有抓住问题的关键。OP询问为什么控制台在一种情况下响应为“undefined”,在另一种情况下响应为“10”。我不是问在函数内部或函数外部编写var,我关心的是为什么控制台响应为不同的outputRight。除了这个问题,当你在控制台中输入两个不同的行时,为什么浏览器控制台会打印它所做的事情。这不是我要问的。OP了解这两个版本的功能,以及范围。问题是为什么当这些行被输入控制台时,控制台会给出不同的响应。可能有一些引用:-赋值表达式返回右边的值-如果成功,则返回未定义。
var a="UnDeletable";
delete a; //Prints false
console.log(a);//Prints UnDeletable
a="Deletable";
delete a;//Prints true
console.log(a);//Reference error..a is not defined