【Miaov】JS6-作用域


作用域

域:空间、范围、区域……
作用:读、写

浏览器:JS解析器
至少分为两部分:

1.找一些东西 根据var/function/参数等去找
a=未定义
所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
fn1=function fn1(){alert(2);}
所有的函数,在正式运行代码之前,都是整个函数块
===》以上为JS的预解析;

遇到重名的:只留一个,变量和函数重名了,就只留下函数

 

2.逐行解读代码
表达式:=+-*%/++--!

表达式可以修改预解析的值

alert(a);
var a=1;
function fn1(){alert(2);}

--------------------------------------------------------------------

alert(a); ------function a(){alert(4)}

var a=1;

alert(a);--------1

function a(){alert(2);}

alert(a);---------1

var a=3;

alert(a);-----------3

function a(){alert(4);}

alert(a);--------3

a()----相当于3()-------会报错

预解析:var function 参数……

--------------------------------------------------------------------------

总结:
一个script就是一个域,是一个全局,script全局变量、全局函数 自上而下,函数 内部也是一块域

作用域的过程

先找东西后执行,

执行的过程中遇到一些表达式就会改原来库里的东西,

遇到函数调用就开了一个新的作用域,然后又重复找东西和执行的过程,

if for while等不是作用域,定义变量时放在外边和放在里边是一样的,

火狐不能对函数进行预解析
全局变量和全局函数尽量放在外边,if和for循环最好不要定义变量和函数


window.onload=function(){

for(var i=0;i<aBtn.length;i++){
aBtn[i].onclick=function(){
alert(i); //3 没有以下内容的时候——有以下内容的时候弹出undefined——以下没有var的时候就是3


aBtn[3].style.background="yellow";//没有aBtn[3]

for(var i=0;i<aBtn.length;i++){
aBtn[i].style.background="yellow";
}
}
}
}

for里面有一个onclick函数的时候不能直接用i否则有很多后患

posted @ 2015-11-05 09:51  chen7  阅读(179)  评论(0编辑  收藏  举报