//基础(变量提神后 var a; console.log(a) a=1 声明会被提到顶部,而a=1在原地不动)
console.log(a) //underfind
var a=1
//例子1
//这里举了一个例子,我创建了一个函数a 判断这个b是否有值;在判断里面声明了B。运行结果是5
//如果当前作用域中存在此变量声明,无论它在什么地方声明,引用此变量时就会在当前作用域中查找,不会去外层作用域了。
function a() {
//编译后 var b;
if (!b) {
var b = 5; //编译后:b=5
}
console.log(b); // 5
}
a();
//第二个例子 (因为函数内部已经存在变量b,所以不会再去外部执行)
var b = 3;
function a() {
//编译后 var b;
var b = b || 10; //编译后:b=b||10
console.log(b) //10
}
a(); //运行结果是10
//第三个例子(JavaScript没有块作用域,只有全局作用域和函数作用域)
function a() {
//编译后 var b;
var b = 3; //编译后b=3;
{
var b = 5;//编译后b=5;
}
console.log(b);//b=5
}
a(); //运行结果是5,为什么呢,其实跟上面的例子相同,只不过执行顺序的原因