作用域

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);
}

  

 

 

  

  

 

posted @ 2017-11-06 17:43  carol72  阅读(124)  评论(0编辑  收藏  举报