在浏览器控制台中键入时,var x = 10和x = 10之间有什么区别?

时间:2016-02-05 05:13:07

标签: javascript node.js

在浏览器控制台中,如果我键入var x=10,则会显示undefined,而如果我键入x=10,则会显示10。两者执行相同的任务然后有什么区别? 我不是要求使用var和不使用var?

之间的区别

7 个答案:

答案 0 :(得分:3)

说明

案例x = 10

这将在名为x的全局范围中创建一个值为10的变量。 此外,这是一个表达式,它返回值10。这对于能够执行将var x = y = 10;x同时设置为值y

10之类的内容非常有用

案例var x = 10

这会在当前范围中创建一个变量,恰好就是这样 全局范围,名为x,值为10。因为它是用它创建的 语法var,它不能作为表达式进行求值,因此返回undefined,将其打印到控制台。

概要

从控制台编写var x = 10x = 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对变量的存储方式没有区别:

Prove

但是,=返回 s您分配的值的运算符,因此a = 1将评估为1,当您发现2时键入b = 2var不返回任何内容,这是一个陈述而不是表达。

答案 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"因为它显示每个命令的返回值,并且控制台在此方案中不返回任何内容。

进一步参考访问此处:

http://blog.modulus.io/absolute-beginners-guide-to-nodejs

答案 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

可配置为true

例如

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
相关问题