1.作用域链
var num=10;
function f1(){
var num=20;
funnction f2(){
var num=30;
function f3(){
var num =50;
console.log(“hh我好帅”);
}
f3();
}
f2();
}
f1();
2.预解析--提前解析代码
console.log(num);
var num=10;
→undefined
//说明:会预解析。
/*
*预解析会做什么事情?
*1.把变量的声明提前了--提前到当前所在作用域的最上面
*2.函数的声明也会被提前--提前到当前所在的作用域的最上面
*/
//函数调用的时候,会把函数的声明提升到作用域上面
//预解析中,变量的提升,只会在当前作用域中提升
//预解析会分段(多对script标签中函数重名,预解析的时候不会冲突)
//JavaScript解析器执行JavaScript代码时,分为两个过程:预解析过程和代码执行过程。
//预解析的时候,先提升变量,后提升函数。
3.预解析案例-1
f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
→输出结果:
9,9,9,9,9,报错
分析:
var a=b=c=9;可以可为var a =9; b=9;c=9;其中b,c为隐式全局变量
4.预解析案例-2
f1();
var f1=function(){
console.log(num);
var num =10;
}
→结果:报错
分析:
f1是变量
执行时,变量提前,为undefine,undifined()会报错。
快乐生活,努力学习,为未来而奋斗!
浙公网安备 33010602011771号