zoukankan      html  css  js  c++  java
  • js查漏补缺

    js解析与执行过程:预处理阶段和执行阶段

    在预处理阶段,用var定义变量,用声明的方式创建函数

    例一:

    1 f();
    2 g();
    3 function f(){
    4 console.log("fff");//fff
    5 }
    6 var g=function(){
    7 console.log('gg');//g 不是一个function
    8 }
    1 console.log(a);//undefined
    2 console.log(b);//b is not defined
    3 var a=5;
    4 b=6;
     1 //先扫描声明后扫秒变量
     2     //处理函数声明的时候有冲突就会覆盖,
     3     //处理变量声明时有冲突,会忽略
     4     alert(f);//function f(){console.log("22");}
     5     var f=5;
     6     function f(){
     7         console.log("11");
     8     }
     9     var f=6;
    10 
    11     function f(){
    12         console.log("22");
    13     }

    执行阶段

     1 alert(a)//undefined
     2   //alert(b)//b is no defined
     3   alert(f) //function f(){console.log(f);}
     4   alert(g) //undefined
     5   //上面都是预处理阶段
     6   //下面是执行阶段
     7   var a=5;
     8   b=6;
     9   alert(b);//6
    10   function f(){
    11       console.log(f);
    12   }
    13   var g=function(){
    14       console.log("g");
    15   }
    16   alert(g);//function(){console.log("g")}

    函数预处理和执行阶段

     1 function f(a,b){
     2   //a变成1,b变成2,变成指向函数的引用
     3   alert(a); //function a(){} 
     4   alert(b); //2
     5   var b=100;
     6   function a(){
     7 
     8   }
     9 }
    10 f(1,2);

    作用域:可以被访问的范围

     1     alert(a);//undefined
     2     alert(b);//undefined
     3     alert(c);//报错
     4     alert(d);//报错
     5     var a=1;
     6     if(false){//js不是块作用域
     7         var b=2;
     8     }else{
     9         c=3;
    10     }
    11     function f(){
    12         var d=4;
    13     }

    块作用域{   这个区域 }

    for(var i=0;i<3;i++){}

    alert(i) //3  说明js没有块作用域

    词法作用域(lexical)(静态作用域或闭包)

     闭包的概念:闭包就是能够读取其他函数内部变量的函数

     1 function f1(){
     2         var a=10;
     3         var b=20;
     4         //这就是一个闭包
     5         function f2(){
     6             console.log(a);
     7         }
     8         f2();
     9     }
    10     f1();
        

    function f1(){
    var a=10;
    var b=20;
    //这就是一个闭包
    return function f2(){
    console.log(a);//10
    }
    }
    var result=f1();
    result();

    日常所遇,随手而记。
  • 相关阅读:
    高斯消去法
    【转】sscanf和sprintf是scanf和printf家族的一对成员
    ps电信
    XNA准备篇(一)
    超级BT的SQL2008 在WIN7下附加 SQL2005的数据库
    绘制半口角
    动态的在输入框边上显示可输入的剩余字符数
    CallContext vs. ThreadStatic vs. HttpContext[待翻译]
    Vista 系统下安装 GhostDoc for Visual Studio 2008
    非常优秀的开源框架地址
  • 原文地址:https://www.cnblogs.com/zhihou/p/8117769.html
Copyright © 2011-2022 走看看