宝哥软件园

理解Javascript_12_执行模型

编辑:宝哥软件园 来源:互联网 时间:2021-10-22

开头简单代码:复制的代码如下: script type=' text/JAVAScript ' src=' http : xx . js '/script script type=' text/JAVAScript ' var I=10;函数say(msg){ alert(msg);}/script script type=' text/JavaScript ' j=100;说(‘hello world’);/script上述代码段的运行顺序如下:复制代码如下: step1。读入第一个代码段步骤2。做语法分析。如果有任何错误,报告语法错误(如括号不匹配等。).跳到第五步。第三步。创建一个全局执行环境(预解析var变量和函数定义)。第四步。执行代码段(当调用函数并进入eval时,将创建一个新的执行环境),并报告任何错误(如未定义的变量)。第五步。如果有下一个代码段,读入下一个代码段。重复步骤2步骤6。结束步骤1中的“脚本段”指的是脚本中的内容./script标记,并且还包括外部引入的脚本文件,比如script src=' http : xx . js '/script也被列为脚本段的类别。第二步的语法分析是什么?语法分析的一个简单理解就是检查Javascript代码的语法结构是否正确。复制代码如下:脚本类型=' text/JavaScript ' var a=10;if(a10 { alert(' yes ');} /script显然,代码无法通过语法分析,而条件语句的输入语法if是错误的。步骤3和步骤4中的“执行环境”是什么,全局执行环境和调用函数创建的执行环境有什么区别?执行环境中有哪些流程?注:以下内容为原文章《javascript提速_01_引用变量优化》前两节的完整版本。关于执行上下文,所有的JavaScript代码都在一个执行上下文中执行。它是一个概念和一种机制,用来完成JavaScript运行时范围和生存期的处理。可执行的JavaScript代码可以分为三种类型:1。全局代码,即不在任何函数中的全局代码,如js文件、嵌入HTML页面的js代码等。2.Eval Code,即由Eval()函数动态执行的JS代码。3.函数代码,即自定义函数中函数体的JS代码。不同类型的JavaScript代码有不同的执行内容。在页面中,第一次加载JS代码时会创建一个全局执行环境。当一个JavaScript函数被调用时,该函数将进入相应的执行环境。如果调用另一个函数(或者递归调用同一个函数),将创建一个新的执行环境,并且在函数调用期间,执行过程将在这个环境中。当被调用的函数返回时,执行过程返回到原始执行环境。因此,正在运行的JavaScript代码构成了一个执行环境堆栈。我们来看一个例子:复制代码如下:脚本类型=' text/JavaScript '函数fn1(){ function fn2(){ alert(document . body . tagname);//BOdy//其他代码.} Fn2();} Fn1();//此处代码/脚本

以上是程序自上而下执行时执行环境的栈图。补充说明:全局执行环境对应全局Code Fn1执行环境,Fn2执行环境一般称为函数执行环境。当进入每个执行环境时,相应的函数代码程序将创建一个名为变量对象的对象。对于函数执行环境,函数对应的每个参数、局部变量、内部方法都会在Variable Object上创建一个属性,属性名为变量名,属性值为变量值。对于全局执行环境,它具有相同的行为。但是需要强调的是,在全局执行环境中,Varible对象是一个全局对象,《理解Javascript_03_javascript全局观》中已经解释过了,可以简单理解为一个窗口对象。这解释了为什么全局方法和全局变量都是窗口对象的属性或方法。请看下面的代码:复制代码如下: var num=123alert(window . num);//123函数say(msg){ alert(msg);} window . say(' hello ');//大家好最后,Variable Object对象是一个内部对象,不能在JS代码中直接访问。至于作用域/作用域链,在访问变量的时候,一定会出现可见性的问题,这就是作用域。此外,当访问一个变量或调用一个函数时,JavaScript引擎根据规则在不同的执行位置建立一个变量对象的链表。当访问一个变量时,它首先搜索链表中的第一个变量对象,如果没有找到,它继续搜索第二个变量对象,直到搜索结束。这就形成了范围链的概念。

范围链图明确表达了执行环境与范围的关系(一一对应),范围与范围的关系(链表结构,自上而下的关系)。注意:本文只是从全局的角度来看javascript执行模型,所以并不深入。具体执行细节请参考后续博文。参考资料:http://www . cn blogs.com/Riccc/archive/2008/02/15/JavaScript-对象-模型-执行-模型. html http://www . cn-杜鹃.com/2007/08/01/。understand-javascript-closures-72.htmlhttp://lifesinger.org/blog/2009/01/javascript-run-mechanism/

更多资讯
游戏推荐
更多+