在浏览器控制台中,如果我键入var x=10
,则会显示undefined
,而如果我键入x=10
,则会显示10
。两者执行相同的任务然后有什么区别?
我不是要求使用var和不使用var?
答案 0 :(得分:3)
说明
案例x = 10
:
这将在名为x
的全局范围中创建一个值为10
的变量。
此外,这是一个表达式,它返回值10
。这对于能够执行将var x = y = 10;
和x
同时设置为值y
10
之类的内容非常有用
案例var x = 10
:
这会在当前范围中创建一个变量,恰好就是这样
全局范围,名为x
,值为10
。因为它是用它创建的
语法var
,它不能作为表达式进行求值,因此返回undefined
,将其打印到控制台。
概要
从控制台编写var x = 10
与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
答案 1 :(得分:3)
你在浏览器控制台中,所以你在全球范围内都是常规的,有或没有var对变量的存储方式没有区别:
但是,=
是返回 s您分配的值的运算符,因此a = 1
将评估为1,当您发现2
时键入b = 2
。 var
不返回任何内容,这是一个陈述而不是表达。
答案 2 :(得分:1)
如果在函数或其他非全局范围内使用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
答案 3 :(得分:1)
情景1:
基本上看,当您在浏览器控制台上键入x = 10时,您获得10,因为10是浏览器控制台返回的int值。
场景2: 当您在浏览器控制台上输入var x = 10时,您将获得" undefined"因为它显示每个命令的返回值,并且控制台在此方案中不返回任何内容。
进一步参考访问此处:
答案 4 :(得分:0)
var x = 10;设置当前范围的值(作为示例在内部函数中)。
x = 10;设置全局范围的值,因此它可以在任何地方访问。
答案 5 :(得分: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
在浏览器环境中,全局均值var定义为对象window
的属性
但是要小心使用第一个代码,它会导致全局定义变量。
如果它在strict mode
,这将无效,因为隐式定义的全局不允许。
答案 6 :(得分:0)
有关上述区别的更多信息:
var x=10;
x=10;
在创建的属性描述符方面有所不同
当您编写var x=10;
时,您无法删除x
,因为对此x
来说,可配置项将为false
另一方面,x=10;
可以删除x
,因为对此x
例如
var a="UnDeletable";
delete a; //Prints false
console.log(a);//Prints UnDeletable
打开新的浏览器控制台时,请不要在同一控制台中写以下语句,否则它将使用以前使用过的a并使用相同的属性描述符,即可配置的false
a="Deletable";
delete a;//Prints true
console.log(a);//Reference error..a is not defined