如果想要学好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自我学习之解析与执行的更多相关文章

  1. 第112天:javascript中函数预解析和执行阶段

    关于javascript中的函数:  1.预解析:把所有的函数定义提前,所有的变量声明提前,变量的赋值不提前  2.执行 :从上到下执行,但有例外(setTimeout,setInterval,aja ...

  2. javascript的加载、解析、执行对浏览器渲染的影响

    javascript的加载方式,总得来说是在页面上使用script来声明,以及动态的加载这些方式,而动态的加载,在很多js库中都能够很好的去处 理,从而不至于阻塞其他资源的加载,并与其并行加载下来.这 ...

  3. 简述javascript的解析与执行

    我们知道浏览器中javascript程序的执行是基于变量与函数的.那么浏览器是如何保存数据,又是如何执行的呢?今天我们一起来探究一下! 0.写在前 最新的 ECMAScript 标准定义了 8 种数据 ...

  4. JavaScript紧凑学习

    JavaScript紧凑学习 windows本地,调用命令行: win键+R 键入cmd , (cmd是Command 命令行 简称) 目录是C盘下的 C:\Users\Administrator&g ...

  5. JavaScript 基础学习(二)js 和 html 的结合方式

    第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...

  6. JS的解析与执行过程

    JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...

  7. javascript设计模式学习之九——命令模式

    一.命令模式使用场景及定义 命令模式常见的使用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的具体操作是什么.此时希望用一种松耦合的方式来设计程序,使得请求的发送者和 ...

  8. 高性能JavaScript模板引擎原理解析

    随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC ...

  9. 大量Javascript/JQuery学习教程电子书合集

    [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人   不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pd ...

随机推荐

  1. iOS_SN_深浅拷贝( 百度的)_转载

    文章原地址:http://www.cnblogs.com/5ishare/p/4362459.html 深浅拷贝前提是:是实现NSCopying或者NSMutableCopying协议. 浅拷贝只是复 ...

  2. DataSet与DataAdapter的关系

    DataSet 作用:DataSet,DataAdapter读取数据. 问:什么是DataAdapter?答:DataAdapter对象在DataSet与数据之间起桥梁作用 string strCon ...

  3. 《APUE》读书笔记第十一章-线程

    本章主要介绍了线程,了解如何使用多线程在单进程环境中来执行多任务.由于多个线程共享其进程空间,所以必须采用同步的机制来保护数据的一致性. 一.线程的概念 典型的Unix系统都可以看成只有一个控制线程, ...

  4. http_load压力测试

    http_load是基于linux平台的性能测试工具,它体积非常小,仅100KB.它以并行复用的方式运行,可以测试web服务器的吞吐量与负载. 一.安装http_load A.进入/usr/local ...

  5. eclipse Content Assist 无法使用,不能自动补全的解决办法

    今天用eclipse写JAVA代码,写着写着突然,eclipse 的自动补全功能失效了,没办法自动补全.折腾半天,终于解决了. 在window->Preferences->Java-> ...

  6. 使用div+iframe实现弹窗及弹出内容无法显示的解决

    使用div+iframe实现弹窗 除了使用实际的弹出窗口,还可以使用控制一个div的display属性来模拟一个弹出窗口的操作,这里使用在Div里放一个iFrame的方式,主要考虑到可以在需要的时候加 ...

  7. 什么是dtd文件,为什么需要dtd

    DTD为英文Document Type Definition,中文意思为"文档类定义".DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许 ...

  8. AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示

    把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到AutoCompleteTextView中. 1:activity_main.xml <LinearLayout x ...

  9. Win8.1 MSDN各版本下载(64位/32位,简体中文,繁体中文,英文),X86&X64,EN,CHS,CHT

    英文64位ed2k://|file|en_windows_8_1_x64_dvd_2707217.iso|3899295744|8E604054013D21209B851E41DC19F6F5|/ 英 ...

  10. 〔写在OS边上〕定性note

    转载:http://tieba.baidu.com/p/1273477757 0 neta 有的时候我们在读书或者看文档.——啊,原来这东西的框架就是这样而已,很直白么.有的时候我们在读代码.——于是 ...