使用var声明的变量是在JavaScript中常用的一种变量声明方式,而不使用关键字声明的变量是指直接使用变量名进行赋值,而不进行显式的声明。
区别如下:
- 变量作用域:使用var声明的变量具有函数作用域(函数内部的作用域是私有作用域),即只在声明的函数内部有效,而不使用关键字声明的变量是全局变量,可以在代码的任何地方访问。
- 变量提升:使用var声明的变量会进行变量提升,即在函数作用域内,无论在哪里声明,都会被提升到函数的顶部,而不使用关键字声明的变量不会进行变量提升。
- 变量重复声明:使用var声明的变量可以被重复声明,后面的声明会覆盖前面的声明,而不使用关键字声明的变量如果重复赋值会修改变量的值,但不会重新声明。
//在函数内部使用var声明 function example() { var x = 10; console.log(x); // 输出 10 } example(); console.log(x); // 报错,x未定义 //不使用关键字声明的变量: function example() { x = 10; console.log(x); // 输出 10 } example(); console.log(x); // 输出 10,x为全局变量
练习
var a = b = 10;
a = 20;
b = 20;
console.log(a)//20
console.log(b);//20
//预解析:var a (只声明不赋值)
//代码执行:1.var a = b = 10;因为不存在b这个变量,所以b被看作全局变量为a,b同时赋值为10
// 2.a = 20;为a重新赋值为20
// 3.b = 20;为b重新赋值为20
// 4.console.log(a)控制台输出a=20
// 5.console.log(b)控制台输出b=20
var a = b;
a = 20;
b = 20;
console.log(a);
console.log(b);
//预解析:var a
//代码执行:1.var a = b; 将b的值赋值给到a,但是未定义报错b is not defined 后续代码不会执行。