Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器控制台中键入var x=10和x=10之间有什么区别?_Javascript_Node.js - Fatal编程技术网

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
时,您将看到a
2
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