javascript变量与var和没有var之间的区别?

时间:2014-02-14 05:41:45

标签: javascript jquery variables scope var

以下两个陈述之间的区别是什么?

var temp = 10;
temp = 10;

2 个答案:

答案 0 :(得分:12)

如果在函数中声明带有“var”的变量将是函数的本地变量,否则js引擎将开始在本地范围(函数)中查找变量,如果找不到它,那么将是在全局空间中自动声明

从此链接:https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/variable-scope

  

当您声明一个全局JavaScript变量时,您实际上是什么   做是定义全局对象的属性(全局对象)。   如果使用var来声明变量,则创建该属性   是不可配置的(参见属性属性),这意味着它   无法使用删除操作符删除。

然后,如果你在一个函数内或在全局空间中(在任何函数之外):

  

温度= 10;

你可以在任何地方使用它:

  

的console.log(window.temp);

只是一堆嵌套函数(读取代码注释从内部开始,以便更好地理解):

//lots of stuff here but not a "var temp=9"

//I couldn't find "x" I will make it global as a property of the globalObject
 function myFunction(){ //is x here ? no ? then look outside
    (function(){ //is x here ? no ? then look outside
        (function() {  //is x here ? no ? then look outside
                x=5; //declaring x without var, I will look for it
        }());
    }());
}

myFunction();
console.log(window.x); //As x was declared a property from the global object I can do this.

如果你在一个函数中用var声明它,你也不能window.temp如果你在一个函数里面做这个变量将是你的函数的“本地”,即:

foo = 1;
function test() {
    var foo = 'bar';
}
test();
alert(foo);

// Result: 1

Source here from above sample and others here

另请注意,在全局空间(外部)中使用“var”,所有函数都将创建一个全局变量(窗口对象中的属性) 顺便说一下,总是使用var。

答案 1 :(得分:0)

在全局范围内定义变量时,您可以在任何地方访问它。如果使用var重新定义它,则变量仅在当前范围内具有该值。

在全局范围内定义变量:

var a = 1;

现在您可以通过以下功能范围访问它:

function print() {
  console.log(window.a); // 1
  window.a = 5;
  anotherFunction(); // 5 
  var a = 3;
  console.log(a); // 3
}
function anotherFunction() {
  console.log(a); // 5;
}