作用域链小案例
作用域 :变量的有效范围
全局作用域
局部作用域
var a=1; function f1(){ var b = 2; function f2(){ var c = 3; console.log(a+b+c);//6 } function f3(){ var d = 4; console.log(c);//undefined } f3(); f2() } f1();
说明
分析:全局中,所有的变量都可以被函数与函数内函数访问,但不是一定会被访问,有个优先级的问题,先在局部作用域访问。
预解析
javaScript运行分为两个阶段:
1.预解析:(把所有的全局变量和全局函数声明提前)
- 全局预解析
- 全局预解析时,同名的变量与函数,组后输出结果以函数的声明为准
函数内部解析
- 在函数内部,同名的变量和函数,还是以函数为准。
- 如果函数有参数,那么如果函数内部有与参数同名的函数,也是以函数名结果为准。
- 如果内部只有参数与变量声明,并且名称相同,以参数为准
- 函数名>参数>变量名;
2.执行
//----------------------- var a; function f00(){ console.log(111); } if("a" in window){ console.log(a); a = 222; } f00(); console.log(typeof a); //------------------------ function a(){ console.log("hello"); } var a=1; function foo(a){ console.log(a); function a(){ console.log(333); } var a = 123; console.log(a); } foo(444);
分析:
函数必须调用,并且函数内部重名的话,优先函数名,其次参数名,最后变量名。