JavaScript作用域分析总结
# 一、JS解析顺序和作用域:
- 解析顺序:
- 定义(先找
varfunction) - 执行 ( 在逐步执行 )
- 注意:如果函数名和
var定义的变量相同,var会被函数覆盖
- 定义(先找
- 作用域:
- 每个
script是一个作用域 - 每个函数
{}是一个作用域 - 程序每执行到一个作用域,都是按照解析顺序解析代码;
- 作用域链:从内往外找要找函数内的变量;
- 每个
# 二、案例分析
-
分析前请记住这段话
- 解析顺序:
- 定义(先找
varfunction) - 执行 ( 在逐步执行 )
- 注意:如果函数名和
var定义的变量相同,var会被函数覆盖
- 定义(先找
- 解析顺序:
-
举例1
alert( a );
var a = 10;
alert( a );
function a(){alert(20)};
alert( a );
var a = 30;
alert( a );
function a(){alert(40)};
alert( a );
// 函数块 10 10 30 30
@前端进阶之旅: 代码已经复制到剪贴板
分析
-
1:找定义 function a(){alert(40)};
-
2:执行 alert( a ) //函数块 a = 10; alert( a ); // 10 alert( a ); // 10 a = 30; alert( a ); // 30 alert( a ); // 30
-
举例2
a();
var a = function(){alert( 1 );}
a();
function a(){alert(2);}
a();
var a = function(){alert(3);}
a();
//2 1 1 3
@前端进阶之旅: 代码已经复制到剪贴板
分析
-
1:找定义 function a(){alert(2);}
-
2:执行 a(); //2 a = function(){alert( 1 );} a(); //1 a(); //1 a = function b(){alert(3);}; a();//3
-
举例3