1.作用域
域:空间、范围、区域....
作用:读、写
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();//报错 /* 1.预解析:var function 参数 。。。 a=function a(){alert(4);} */
域
自上而下、由里向外(作用域链)
var a=1; function fn1(){ alert(a); //未定义 var a = 2; } fn1(); alert(a); //1 /*1.预解析: a=underfind; fn1=function(){alert(a);var a=2;} 2.逐行解读代码: 表达式 a=1; 读到函数没有执行,再往下读遇到函数调用 1)预解析 a=未定义 2)逐行解读代码: */ var a=1; function fn1(var a){ alert(a); //未定义 a = 2; } fn1(); alert(a); //2 /*1.预解析: a=underfind; fn1=function(){alert(a);var a=2;} 2.逐行解读代码: 表达式 a=1; 读到函数没有执行,再往下读遇到函数调用 1)预解析 a=未定义 2)逐行解读代码: */ var a=1; function fn1(var a=1){ alert(a); //1 a = 2; } fn1(a); alert(a); //1 /*1.预解析: a=underfind; fn1=function(){alert(a);var a=2;} 2.逐行解读代码: 表达式 a=1; 读到函数没有执行,再往下读遇到函数调用 1)预解析 a=未定义 2)逐行解读代码: */
想要获取函数内的值:
//第一种方法 var str=""; function fn1(){ var a='大鸡腿~'; str=a; } fn1(); alert(str);//大鸡腿~ //第二种方法 function fn2(){ var a="11111111"; fn3(a); } fn2(); function fn3(a){ alert(a); }