【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否则有很多后患