JavaScript自我学习之解析与执行

2023-10-15,,

如果想要学好JavaScript那么我们首先必须要知道浏览器JavaScript引擎是如何解释执行JavaScript代码的,作为一名菜鸟,从自己学习JavaScript的过程来说,真心觉得不了解这些在以后的学习JavaScript过程中会徒增许多困惑,多走许多弯路.好了废话不多说了,我们就一起来看看到底怎么一个过程吧.

浏览器在执行JavaScript代码之前会进行类似写C和C++一样的预编译操作,在预编译的阶段,首先创建一个当前执行环境下的活动对象,并且将那些用 var 声明的变量设置为当前活动对象的属性,但是这些变量的初始化的赋值都是undefined;而对于那些function 定义的函数也添加为当前活动对象的属性,而他们的值赋予的是函数的定义,特别提醒下对于下面的代码不要误解,匿名函数是不会被解析的,funTemp的初始化依旧在执行阶段;

 var funTemp=function() { //匿名函数
alert("Hello World!");
}

针对预编译阶段我们为了便于理解验证,那么首先举例来看一看:

 <script type="text/javascript">
alert(tempFirst); //返回值undefined
var tempFirst="麦兜";
alert(tempFirst); //返回值 麦兜 alert(Hello); //返回值 函数Hello定义语句
alert(Hello()); //返回值 Hello JavaScript
function Hello(){
alert("Hello JavaScript");
} alert(Hi()); //返回值 undefined
var Hi=function (){
alert("Hi JavaScript");
} </script>

预编译阶段结束后我们来看看执行阶段是如何进行的,首先遇到变量需要解析时候,会首先从当前的执行环境中的活动对象进行查找,如果没有找到但是该活动对象拥有prototype属性中进行查找,没有找到的话按照作用域链继续查找.遇到var a=...这样的语句时候则会给相应的变量a进行赋值,下面我们举个有意思例子来加深下对这个概念的理解。

   <script type="text/javascript">

   var name="Sudo";

   function nameScope()
{
alert(name); // 返回值 undefined
var name="Admin";
alert(name); // 返回值 Admin
}
nameScope();
alert(name); // 返回值 Sudo
</script>

在执行nameScope()函数时候,第一个alert(name)会先从该函数的作用域里面寻找name属性,因为在预编译的时候确实赋予了当前作用域里面有name属性,并且赋值为undefined,找到了以后当然不会去寻找外围的全局name了,所以先弹出undefined,然后函数里面对其赋值admin初始化,继而弹出Admin,同样在函数执行完成后,类似与其他语言里面的析构函数一样,所有占用的内存全部释放了,而其变量也仅仅在当前函数内执行有效,最外面alert(name),则访问的即是全局变量sudo为弹出结果,留给有意思的代码,猜猜结果

  <script type="text/javascript">

  var name="Sudo";

  function nameScope()
{
alert(name); // 返回值 Sudo
name="Admin";
alert(name); // 返回值 Admin
}
nameScope();
alert(name); // 返回值 Admin
</script>

好了,其实这些是自己一边学习一边总结的,以后或多或少肯定会有错误,希望大家提点下哦,

JavaScript自我学习之解析与执行的相关教程结束。

《JavaScript自我学习之解析与执行.doc》

下载本文的Word格式文档,以方便收藏与打印。