变量声明
在JS中,使用一个变量之前应当先声明,变量是使用关键字 var 来声明的。
例如:
var i;
var sum;
或
var i, sum;
或
var message = "hello";
var i = 0, j = 0, k = 0;
- 如果未在 var 声明语句中给变量给定初始值,那么虽然声明了这个变量,但在给它存入一个值之前,它的初始值就是 undefined。
- JS变量可以是任意数据类型,例如:
var i = 10;
i = "ten";
- 使用 var 语句重复声明变量是合法且无害的。如果重复声明带有初始化器,那么这就和一条简单的赋值语句没什么两样。
- 如果试图读取一个没有声明的变量的值,JS会报错
变量作用域
在函数体内,局部变量的优先级高于同名的全局变量。
函数作用域和声明提前
JS的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,变量在声明之前甚至已经可用,JS的这个特性被称为声明提前,即JS函数内声明的所有变量都被“提前”至函数顶部。
例如:
var scope = "global";
function f(){
console.log(scope); // 输出“undefined”,而不是“global”
var scope = "local"; // 变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的
console.log(scope); // 输出“local”
}
上述过程等价于:
var scope = "global";
function f(){
var scope; // 在函数顶部声明了局部变量
console.log(scope); // 变量存在,但其值是“undefined”
scope = "local"; // 变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的
console.log(scope); // 输出“local”
}
作为属性的变量
当声明一个JS全局变量时,实际上是定义了全局对象的一个属性。
当使用 var 声明一个变量时,创建的这个属性是不可配置的,也就是说这个变量无法通过delete运算符删除。