javascript能干什么返回列表
上传时间:2015-02-02 内容关键字:
一、变量的作用域:
1.全局变量:
在代码中任何地方都能访问得到的变量,拥有全局的作用域。
A.最外层函数外面定义的变量。
B.没有定义直接赋值的变量,拥有全局属性。
2.局部变量:
只能在固定的代码片段(函数片段)中访问得到的变量。
A.函数内部定义的变量,就是局部变量。
为什么要分局部和全局,有什么作用?
答案:可以提高程序的逻辑性和安全性,减少名字的冲突。
二、javascript预解析顺序。
1. 块依次解析
2.解析代码运行的环境。(是全局环境,还是函数局部环境)
3.对标示符(关键字)(var function)进行预解析,解析到相应的环境下。比如你运行的是个函数那里这个函数里面的关键字就进行相应的解析到这个函数里,所以解析的环境不一样
实例1:运行的结果是空。
var aa='aaa';
function bb(){
alert(aa);
var aa='bbbbbb';
}
bb();
实例2:
var aa= '我是全局的aa'; //从前往后这个aa风骚的打着酱油。
var dd= '我是全局的dd';
function bb(){
var aa='我是bb里面cc外面的变量';
alert(aa);
function cc(){
alert(aa);
alert(dd);
}
cc();
}
bb();
解析过程:
1.解析javascript环境是全局环境
2.解析变量:
bb()函数 --->Object
aa变量 ---->Undefined 只解析var关键字后面的变量名
dd变量 ---->Undefined 暂时不会给aa,dd赋值
bb()函数里的所有内容都暂时没有解析,因为解析的环境还没有进入到bb()里。
3.赋值:
当全局环境中的所有函数function和var关键字后面的变量名解析完毕以后,我们接着给已经解析完 毕的var变量赋值
4.调用bb()函数,解析环境由全局环境进入第一层的bb()函数环境。
5.解析bb()里的变量和方法:
aa变量 --->Undefined 同样只是解析var关键字后面的变量名
cc()函数-->Object
6.赋值:
给aa变量赋值
7.接着调用alert(aa);aa按着作用域链从里到外找var aa='我是bb里面cc外面的变量',弹出。
8.接着调用cc(),解析环境进入cc()函数的环境,里面没有有关var定义的变量和方法,只有alert(aa)。
9.这个时候它会按着作用域链从里到外依次查找变量aa,var aa='我是bb里面cc外面的变量'被找到
10.接着执行alert(dd),依旧从里到外依次查询dd变量,直到最外面var dd= '我是全局的dd';
- 上一篇:已经没有了
- 下一篇:javascript兼容性总汇