前端开发预解析

web前端开发求职简历|前端开发有哪些框架|前端开发框架有哪些

预解析过程:
1、先开始解析var,函数,函数参数(三样东西)
依据代码从上到下的顺序解析。若var a=1;解析为var a,此时的a是未定义的,若返回,则返回undefined;解析函数function foo(){}(整个函数块,不解析函数内部);解析参数,若function foo(n1){},解析为var n1,同样,未定义,若返回,返回undefined。
在解析的时候,若遇到重名的,只留一个。若var 和函数重名,留函数;若函数重名,留最后面一个函数。如预解析时解析出来如下:
var a;
functon a(){alert(1)}; //var 与函数,保留函数
var a; //又是var 与函数,保留函数
functon a(){alert(2)}; //两个函数,保留最后一个
var a; //又是var 与函数,保留函数

名称均为a,重名,最后保留的是 a=function(){alert(2)};

2、执行解读代码
逐行解读代码,表达式可以修改预解读时的值,如全局代码中有var a=2;执行的时候就会为之前解析的var a赋值为2,不再是未定义。

3、遇到函数时,又开始解析var,函数,参数
执行过程中遇到函数时,就进入函数,并在该作用域下又进行解析过程,解析之后又执行解读代码。

例子:
1、
var x = 1;
function ScopeTest(){
alert( x ); //underfined
var x = ‘hello world’;
alert( x ); //hello world
}
ScopeTest();

2、
源代码:
var b = 1;
function show(){ alert(b); //undefined
var b = 12; alert(b); //12
}
show();
alert(b); //1
解析执行过程如下:
var b;
function show(){}; b=1;
show();var b; //覆盖全局变量b
alert(b); //undefined
b=12; alert(b); // 12
alert(b); //全局变量 b=1
详细的解析执行过程如下:
全局环境预解析开始,如var b(此时的b为undefined);function show(){}; 有参数的也会解析参数,全局环境预解析结束;
全局环境代码执行开始,如b=1;再执行函数,相当于var show = function(){}; 进入show();
函数show中预解析开始,如var b(b为undefined),覆盖了全局变量b,同样解析那三样,函数show中预解析结束;
函数show中的代码执行开始,一行行执行,b=12;(若在赋值前调用alert(b),弹出undefined),alert(b); // 12 函数show中的代码执行结束;
show() alert(b); //全局变量 b=1
全局环境代码执行结束

3、
var x=1;
function foo(x){
x=2;
alert(x);
var x=4;
alert(x);
}
foo(); //2,4
foo(x); //2,4
alert(x); //1

若:
var x=1;
function foo(x){
//x=2;
alert(x);
var x=4;
alert(x);
}
foo(); //undefined,4
foo(x); //1,4
alert(x); //1

前端开发 高级教程|移动应用前端开发的相关用书|htmlweb前端开发教程

» 本文来自:前端开发者 » 《前端开发预解析》
» 本文链接地址:https://www.rokub.com/5038.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!