作用域

it2024-10-09  26

1.域:空间、范围、区域。 如:js必须放在script里,css放在style里,它的作用就是(在一个范围内)读和写

2.浏览器有读js的解析器,当进入script标签后:

第1步–预解析:

找到全局的var和function(变量提升),先检查function函数名和内容并储存,当发现重名时,后面的函数覆盖前面的函数;再检查var变量的值并设置undefind,但是发现重名时会自动跳过(包括变量名与函数名相同)

第2步–逐行读代码:

在变量在赋值之前值一直是undefind,除非读到=、+、-、*、/、%、++、–、!等表达式,而逐行读到函数时则什么都不会做,直到函数被调用才会执行其内容代码

3.作用域面试题

// //1、 var a=1; function fn1(){ alert(a); var a=2; } fn1();//undefined alert(a);//1 //2、 var a=1; function fn1(){ alert(a); a=2; } fn1();//1 alert(a);//2 //3、 var a=1; function fn1(a){ alert(a); a=2; } fn1();//undefined alert(a);//1 //4、 var a=1; function fn1(){ alert(a); a=2; } fn1(a);//1 alert(a);//2

4.函数内的var定义一个局部变量,没有办法从外面找到函数里面的东西,如:

function fn1(){var a = 'abc';} //在全局里a找不到 //如果想要获取函数里的内容的可以用全局变量储存: var str = ''; function fn1(){ var a = 'abc'; str = a; } fn1(); alert(str); //还可以使用局部函数调用的方法: function fn1(){ var a = 'abc'; fn2(a); } function fn2(str){ alert(str); }

5.注意: if(){}和for(){}的花括号不是作用域 匿名函数如:

window.onload = fucntion(){} //{}里也是一个域,里面的变量也是局部变量

当出现错误的时候,如果不是代码写错了,那就是代码的解析机制想错了

最新回复(0)