js预解析学习

1.js解析器运行时会产生全局对象global,其他全局变量则是global对象的属性。

2.非顶层代码中的变量为局部变量,又称为调用对象的属性。

3.预解析var变量,初始化为undefined(预解析是入栈的过程,无论是引用数据类型还是非引用数据类型,都要分配内存。引用类型数据在内存中存放引用指针,非引用数据类型存放变量名),function f(){}这样的函数会被直接编译,非var声明的变量默认为全局变量。

4.创建作用域执行环境,依次为:调用对象(细分为嵌套函数的调用对象,调用对象)、全局对象。

ok,明白了以上几点,以下的几个示例便没有什么问题了。

1.

f7();
f6();//error,f6 is not a function
function f7(){
alert("f7函数");
}
var f6=function(){
alert("f6函数");
}
var f5=function(){
s="global";
}();

2.

var f5=function(){
s="global";
}();
f5();
alert(s);//display:global

3.

var f=function(){
s="haha";
alert("第一个s:"+s);//display:haha
var s="hehe";
alert("第二个s:"+s); //display:hehe
}();

4.

var s="global";
var f4=function(){
alert("s的值是:"+s);//display global
s="local";
alert("s的第二次值是:"+s);//display local
}();

 5.

var a="yeye";
var f2=function(){
alert("第一个a:"+a);//display undefined
var a="gaga";
alert("第二个a:"+a); //display gaga
}();
posted @ 2011-12-16 17:14  xmlovecss  阅读(262)  评论(0编辑  收藏  举报