美文网首页
web前端面试题-javascript(四)

web前端面试题-javascript(四)

作者: 看庭前花开花落_望天上云卷云舒 | 来源:发表于2019-12-26 10:46 被阅读0次

    1.预解释:不管条件是否成立都要进行预解释

     if(!("a" in window)){
       var a=1;
    }
      alert(a);//undefined
    

    2.预解释:等号右边的不进行预解释(匿名函数之函数表达式)

    var a=1,
     b=function a(x){
        x&& a(--x);
     }
    alert(a); // 1
    

    3.预解释:变量重复了不再重新声明,会重新定义

    function a(x){
       return x*2;
    }
    var a;
    alert(a);//function a(x){return x*2;}
    

    4、预解释:等号右边的不进行预解释,变量重复了不再重新声明,要重新定义

    var time=function(){
        console.log(1)
    }
    function time(){
        console.log(2)
    }
    time(); //1
    

    5. this关键字问题

    var name="222"
    var a={
       name:"111",
       say:function(){
           console.info(this.name);
       }
    }
    var fun=a.say;
     fun();//222
    a.say();//111
     var b={
         name:"333",
         say:function(fun){
         fun();
     }
     }
     b.say(a.say);//222
     // a.say相当于把function(){console.info(this.name)}给了 b里的方法say做参数并且执行这个方法所以是window下的name
     b.say=a.say;
     b.say();//333
    

    6、js delete删除对象属性,delete删除不了变量及原型链中的变量

    (function(x){
         delete x;
          alert(x);
     })(1+5)   //6 
    

    7、setTimeout 是异步的

    var a=6
    setTimeout(function(){
       alert(a);
       var a=66;
     },1000);
     a=666;
    alert(a); //  666  1s后是undefined
    
    8、setTimeout是异步的等到循环执行完后才能执行函数里的代码,此时的i已经变成了4
    for(var i=1;i<=3;i++){
        setTimeout(function(){
              console.log(i)
          },0)
    }// 同时输出3个 4
    
    9、同一个引用地址
    var a=new Object();
    a.value=1;
    b=a;
    b.value=2;
    alert(a.value)  //2
    
    10、考查预解释
    function Foo(){
        getName=function(){alert(1);}
        return this;
    }
    Foo.getName=function(){alert(2)};
    Foo.prototype.getName=function(){alert(3)}
    var getName=function(){alert(4)}
    function getName(){alert(5)}
    
    Foo.getName();//2
    getName();//4   带var提前声明、function声明加定义、已有的变量不再重复声明、
    Foo().getName(); //1   先执行Foo函数,紧接着执行里边的getName  同时getName 也改变了全局的getName,因为它没有带var 
    getName();  //1   上边的代码执行后全局的getName函数被改了
    (new Foo()).getName() //3 
    
    11、计算
    console.log(10/4) //2.5
    console.log((10/4).toFixed(2)) //2.50
    console.log(10%4)  //2  即整除后的余数
    
    5、这道题是阿里的面试题自己计算下吧
       function Test(){
           this.verObj=undefined;
       }
       Test.prototype=function(){
           var count=0;
           function Version(){
               this.version="1.1";
           }
           Version.prototype.setVersion=function(v){
               this.version=v;
           };
           Version.prototype.getVersion=function(v){
               return this.version;
           };
           return{
               setCount:function(v){
                   count=v;
               },
               getCount:function(){
                   return count;
               },
               setVersion:function(v){
                   this.verObj=this.verObj||new Version();
                   this.verObj.setVersion(v);
               },
               getVersion:function(){
                   return this.verObj.getVersion();
               }
           }
       }();
           var test1=new Test();
           var test2=new Test();
           test1.setCount(100);
           test2.setCount(200);
           test1.setVersion("1.1");
           test2.setVersion("1.2");
           alert(test1.getCount());
           alert(test2.getCount());
           alert(test1.getVersion());
           alert(test1.getVersion());
    

    相关文章

      网友评论

          本文标题:web前端面试题-javascript(四)

          本文链接:https://www.haomeiwen.com/subject/sbzcoctx.html