-
函数作用域
函数的嵌套关系是定义时决定的,而非调用时决定的。
var v1 = 'global';
var f1 = function(){
console.log(v1);
}
f1(); //global
var f2 = function(){
var v1 = 'local';
f1();
};
f2(); //global
-
变量的作用域
- 全局作用域不能引用局部变量;局部作用用能引用全局变量。
- 查找变量时,先看局部,再到全局,如果都没有查找到该变量的定义,此时页面会抛错“** is not defined”(** 变量未定义)。
-
变量的提升
- 函数及变量的声明都将被提升到函数的最顶部;
-
函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量;
- 变量可以在使用后声明,也就是变量可以先使用再声明;
x = 2; // 变量 x 设置为 2 elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x; // 在元素中显示 x var x; // 声明 x
- 只有变量的声明会提升,初始化不会;
- 在当前作用域内,变量声明会先提升到顶部,其值为"undefined",直到该变量成功赋值初始化,此时调用才能得到真实的值;
- 在当前作用域内,如果在变量赋值初始化之前调用该变量,会得到“undefined”;
var f = function(){ console.log(v1,'=========before defined======'); //undefined var v1 = 'local'; console.log(v1,'========defined======='); //local }; f();