`
scomouse
  • 浏览: 14590 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

javascript 运行机制

 
阅读更多

以下全是个人理解以及网上查找而来,如有不对请指正...

假如有n段js代码 用<script>标签隔开的.

运行顺序是

step1. 读入第一个代码段
step2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到step5
step3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)
step4. 执行代码段,有错则报错(比如变量未定义)
step5. 如果还有下一个代码段,则读入下一个代码段,重复step2
step6. 结束

这些是从网上找到的 至于对错 真的不知道如何验证,就暂时当它是正确的.........

js是解释型语言,通过词法分析和语法分析得到语法树后,就可以开始解释执行了。(语法分析 ,词法分析这个我也没研究过)

另外还有一些概念 如预编译

1. 在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。

2.在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = ...这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)

预编译应该在上面的哪个阶段开始执行了

我觉得应该是step3 因为是类似“预编译”,实际上是已经开始执行了.所以应该是 3;

可以看一下下面的例子

<script>

alert(i);

</script>

会报告错误 提示i未定义

<script>
alert(i);
var i=1;
</script>

会谈出undefine

不会报告错误 跟预定义的解释一样...........

还有就是在解析的时候 有个先后顺序 那就是先解析函数 在解析变量

且函数的作用域是在定义的时候,而不是执行时候的作用域

一个例子

<script>
var c = "123";
function xx(){
alert(c);
var c="xx";
}
xx()
</script>

出现的是undefined

因为先解析的xx 所以是找不到c的

又因为编译的关系,知道了在 xx()内部有一个c变量,所以会有一个undefined的直

在运行xx()的时候 因为有undefined的直就弹出来了

如果没有下面的那个 var c = "xx"

<script>
var c = "123";
function xx(){
alert(c);
}
xx()
</script>

会弹出来123

这是因为作用域链的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    javascript运行机制1

    javascript运行机制1

    JavaScript运行机制浅探

    一篇很好的JavaScript运行机制介绍文章,与大家一起分享!

    javascript运行机制之this详细介绍.docx

    javascript运行机制之this详细介绍.docx

    JavaScript运行机制实例分析

    本文实例讲述了JavaScript运行机制。分享给大家供大家参考,具体如下: 第一次写博客 目前研一第二学期,大二开始入门前端,然而长久以来都是对于框架的简单调用,并未对其进行深入研究,因此,这个博客是作为自我...

    JavaScript运行机制之事件循环(Event Loop)详解

    主要介绍了JavaScript运行机制之事件循环(Event Loop)详解,本文从多个方面讲解了Event Loop,需要的朋友可以参考下

    javascript运行机制之this详细介绍

    主要介绍了javascript运行机制之this,需要的朋友可以参考下

    javascript运行机制之执行顺序理解

    如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜。  那么JavaScript是怎么来进行解析的吗?它的执行顺序又是...

    详解javascript new的运行机制

    和其他高级语言一样javascript 中也有new 运算符,我们知道new 运算符是用来实例化一个类,从而在内存中分配一个实例对象。 但在 javascript 中,万物皆对象,为什么还要通过new 来产生对象? 本文将带你一起来探索 ...

    简单通过settimeout看javascript的运行机制

    下面我们通过settimeout的几个示例来展现javascript的运行机制的特殊点 示例1 console.log(1); setTimeout(function(){ console.log(2); },0); console.log(3); // 打印出 1 3 2 示例2 console.log('1'); ...

    关于JavaScript定义类和对象的几种方式

    其实很简单,看一看JavaScript运行机制就会明白。我们可以把这种现象看做“预声明”。但是如果稍微深究一下,会明白得更透彻。 这里其实涉及到对象属性绑定机制。因为所有JavaScript函数都是一个对象。在函数里声明...

    web:wing 前端积累与创造

    浏览器静态服务器与自动刷新扩展知识jquery延迟对象deferredrequire学习 http://www.imooc.com/learn/787深入JavaScript http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.htmlJavaScript 运行机制详解 ...

    剖析 Vue.js 内部运行机制

    剖析 Vue.js 内部运行机制

    JavaScript基础与案例开发详解/于坤, 周大庆编著

    针对初学者,《JavaScript基础与案例开发详解》也讲解了JavaScript的基本语法,所以即使没有任何编程语言基础,读者也能够明白JavaScript的运行机制。针对有其他编程语言基础的读者,书中还介绍了JavaScript的高级...

    JavaScript基础与案例开发详解pdf

    针对初学者,本书也讲解了javascript的基本语法,所以即使没有任何编程语言基础,读者也能够明白javascript的运行机制。针对有其他编程语言基础的读者,书中还介绍了javascript的高级用法,让这个被称为“脚本”的...

Global site tag (gtag.js) - Google Analytics