易截截图软件、单文件、免安装、纯绿色、仅160KB

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的直就弹


相关文档:

href=“#”与href=“javascript:void(0)”区别

使用过ajax的都常见这样的代码:
<a href="javascript:doTest2();void(0);" mce_href="javascript:doTest2();void(0);">here</a>
但这儿的void(0)究竟是何含义呢?
Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。
void 操作符用法格式如下:
1. javascript:void (expres ......

Javascript Closures

Javascript Closures
Introduction
The Resolution of Property Names on Objects
Assignment of Values
Reading of Values
Identifier Resolution, Execution Contexts and Scope Chains
The Execution Context
Scope chains and [[scope]]
Identifier Resolution
Closures
Automatic Garbage Collecti ......

JavaScript中的空类型

转载理由:短小精悍。
来源:互联网
一 Undefined 类型
只有一种值 undefined
以下三种情况typeof 返回类型为undefined
1. 当变量未初始化时
2. 变量未定义时
3. 函数无明确返回值时(函数没有返回值时返回的都是undefined)
undefined 并不等同于未定义的值
typeof 并不真正区分是否是未定义
看以下示例 ......

javascript中的null和undefined

javascript中的null和undefined
本文装载网络,版权归原作者所有。
null :表示无值;
undefined : 表示一个未声明的变量,
                或已声明但没有赋值的变量,
          &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号