重复声明和遗漏声明变量是合法且无害的
变量作用域:
在函数体内,局部变量的优先级高于同名的全局变量,函数定义是可以嵌套的。由于每个函数都有它自己的作用域,因此它会出现几个局部作用域嵌套的情况。
函数作用域和声明提前
Js没有块级作用域,它是使用函数作用域:变量在声明它的函数体及这个函数体嵌套的任意函数体内都是有定义的。
函数内声明的所有变量在函数体内始终是可见的。有意思的是,这意味着变量在声明之前甚至已经可用。这种情况,被非正式的称为:声明提前
即:js函数里的声明的所有变量(不涉及赋值)都被“提前”至函数的顶部。
如
var scope = “global”;
function f(){
console.log(scope); //undefined; 而不是”global”
var scope = “local” ;
console.log(scope);
}
等价于:将函数的声明:“提前”至函数顶部,同时变量初始化留在原来的位置。