变量的声明方式
// 1.声明变量
var a;
a = 1; // 赋值
// 2.声明变量,同时初始化变量
var b = 2;
// 3.声明变量,同时初始化变量(此种方式声明的变量,作用域为全局)
c = 3;
变量的存储方式与作用域
储存方式
变量存储在栈内存中,变量按变量值的存储方式分为基本数据类型的变量,和引用数据类型的变量。
所有变量的变量名都存储在栈内存中,基本数据类型的变量值是存储在栈内存中的,其他数据类型(称为引用数据类型)的变量值在栈内存中是一个地址(称为引用),这个地址是堆内存中的地址,真正的变量值就保存在堆内存所在的这个地址中。
基本数据类型的变量与引用数据类型的变量存储方式的不同,如下图:
作用域
var a = 1; // a的作用域是全局的
function fun(){
var b = 2; // 变量b的作用域在fun函数中,fun函数外面无法使用
c = 3; // 变量c的作用域是全局的
}
Note:JS里没有局部变量,只有函数变量;也就是所在{ }里声明的变量,出了函数块也是能用的;但是在函数中里声明的变量,出了函数是不能使用的。(例如:if(){}、for(){}。在它们中的代码块中声明中的变量出了代码块也能使用,并没有被销毁。)
变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
console.log(x); // undefined
x = 1;
console.log(x); // 1
var x;
// 上面的语句,经过变量提升后
var x;
console.log(x); // undefinde
x = 1;
console.log(x); // 1