js词法分析

来源:互联网 发布:大数据技术发展现状 编辑:程序博客网 时间:2024/06/08 17:20

当函数调用的前一瞬间,分析以下3个方面的东西,

1:参数2:局部变量声明3:函数声明

在函数运行的前一瞬间,先形成一个激活对象,叫Avtive Object, AO,AO的作用是用来存储一个函数相关的参数,局部变量等.函数内部无论是引用参数,还是引用局部变量,都到AO上找.

<script type="text/javascript">function t3(x,y) {    var x = 7;    console.log(x); // 7    console.log(y); // undefined}//t3(5);/***// 分析参数AO[x,y]// 分析变量声明AO.x 已存在,不做任何影响.AO[x,y]// 执行过程AO.x = 7console.log(AO.x) ==> 7console.log(AO.y) ==> undefined***///------------------------------------var str1 = 'global';function t4() {    console.log(str1); //global    console.log(str2); //undefined    var str2 = 'local';    console.log(str2);//local}//t4();/* 词法分析过程分析参数AO[]分析局部变量AO[str2] ,值是undefined执行console.log(str1);  // AO上找不到,到全局找console.log(str2);  // AO上找到,值是undefined*///------------------------------------function t(x,y) {    function x() {        alert('hello');    }    var y = 99;    console.log(x);  //function    console.log(y);  //99   }t(3,4);/***// 词法分析// 分析参数AO[x,y],// 分析变量声明AO[y],已存在,不做任何影响.// 分析函数声明表达式形成AO.x = funciton x() {alert('hello')}***/</script>


<script type="text/javascript">/*function t(x) {    alert(x); // function        function x() {        alert(x);    }    alert(x); // function}t(1);*/function t(x) {    alert(x); // 1        var x = function () {        alert(x);    }    alert(x); // function}t(1);// 通过上面的例子可看出// 函数声明表达式,和函数变量表达式的区别.// function t () {} ,这种称为声明表达式, 立即影响AO// var x = function () {} ,这种是等号右边是一个表达式,返回[函数类型的]值,把值赋给x,</script>

<script type="text/javascript">/*function t(x) {    alert(x); // function        function x() {        alert(x);    }    alert(x); // function}t(1);*/ function t1(x) {    alert(x); // function        function x() {        var x = 9;        alert(x);    }    x(); // 9  如果var x = 9 屏蔽 ,结果是function}t1(1);/**// 分析参数AO1AO1[x]AO1[x=1]// 分析函数声明表达式AO1[x=function(){}]执行x函数:AO2AO2[]// 执行内部alert(x)**/</script>


原创粉丝点击