2、预解释(变量提声)

一、为什么要学习预解释

  1.带var和不带var的区别

  2.明白obj[i]的i会报错

  3.带var和不带var程序都能正常执行

  4.规范代码,明白报错原因

二、认识预解释

  1.浏览器自带机制

  2.当浏览器加载html时,首先会提供一个供全局js执行的环境--全局作用域(window)。

三、预解释原理  

  在当前作用域下,js代码执行之前,浏览器会对带var和function的进行提前声明或定义。

  1.声明(declare)--告诉浏览器在当前作用域下有这个东西了

     定义(defined)--给函数fun定义

  2.对于带var和带function的预解释机制是不一样的:

     带var的知识提前声明不定义,默认值是undefined

     带function的声明加定义都完成。

  3.预解释只发生在当前作用域中,最开始只对window下进行预解释,若在某个函数里面带var和带fun的,只有当函数执行的时候,才会与解释。

  /*  var n=9;
   var s="str";
   function fn(){
   alert(n);
   alert(s);
   n=7;
   var n=6;
   alert(n);
   }

   fn();*/

  /*  var oBtn=document.getElementsByTagName("input");
    for(var i=0;i<oBtn.length;i++){
        oBtn[i].onclick=function(){
            for(var j=0;j<oBtn.length;j++) {
            oBtn[j].style.background="red";
            }
        }
    }
    */
/*    alert(a);
    var a=3;
//    alert(a);
    function fn(a){
        alert(a);
        a=1;
        alert(a);

    }
//  m=1;
//    alert(m)
    fn();
    fn(a)*/

/*f=function(){return true};
g=function(){return false};
  (function(){
      if(g()&&[]==![]){//会对函数g进行预解释,所以函数内g() 函数执行会返回结果true;
          f=function(){return false};
          function g(){return true};
      }
  })();
    console.log(f());
    console.log(g());*/
//    对函数g()进行预解释后,函数执行放在函数定义前面也会执行。

/*    var name="dalyn";
    var age="500";
    name=(function(name,age){
       name="DALYN" ;
       age= age||this.age;
       console.log(name,age)
    })(name)
    console.log(name,age) //函数没有返回值 所以是undefined
    */
//    注意运算符的优先级

    /*var i=3;
    function fn(){
        i*2;
        return function(n){
            console.log(n*(++i))
        }
    }
    var f=fn();
    f(3);
    fn()(3);
    f(4);
    fn()(4);*/

    function fn(){
        var i=10;
        return function(n){
            console.log(n+(++i))
        }
    }
    var f=fn();
    f(15);
    f(20);//不销毁 函数中return的返回值被变量f占据 之后后面小函数执行完毕销毁
    fn()(15);//不立即销毁  函数中return的返回值被变量f临时占据,(15)执行完毕后都销毁了。
    fn()(20);
    fn()(30);
    f(30);

 

posted @ 2017-08-01 13:25  dalyn  阅读(57)  评论(0编辑  收藏  举报