关于jquery:带var和不带var的javascript变量的区别?

Difference between javascript variable with var and without var?

本问题已经有最佳答案,请猛点这里访问。

下面两个陈述有什么区别?

1
2
var temp = 10;
temp = 10;


如果在一个函数中声明一个带有"var"的变量,该变量将是您的函数的本地变量,否则JS引擎将开始在本地作用域(函数)中查找该变量,如果找不到该变量,则将在globalspace中自动声明。

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

When you declare a global JavaScript variable, what you are actually
doing is defining a property of the global object (The Global Object).
If you use var to declare the variable, the property that is created
is nonconfigurable (see Property Attributes), which means that it
cannot be deleted with the delete operator.

然后,如果在一个函数内或全局空间内(在任何函数外)执行此操作:

temp=10;

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

console.log(window.temp);

只是一堆嵌套函数(为了更好地理解,请阅读从内部函数开始的代码注释):

1
2
3
4
5
6
7
8
9
10
11
12
13
//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;如果在函数内执行,则该变量将对函数"local",即:

1
2
3
4
5
6
7
8
foo = 1;
function test() {
    var foo = 'bar';
}
test();
alert(foo);

// Result: 1

从上面的样品和其他样品中获取。

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


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

在全局范围中定义变量:

1
var a = 1;

现在您可以通过如下函数的作用域访问它:

1
2
3
4
5
6
7
8
9
10
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;
}