美文网首页
东哥面试题

东哥面试题

作者: 观球捕鱼 | 来源:发表于2019-12-31 00:19 被阅读0次

    东哥面试题

    ============

    JS高级


    1. 判断以下程序的输出结果:
    var age=100;
    function test(){
        this.age=50;
        return function(){
        return this.age;
        }
    }
    var m=new test();//  m = function(){return this.age}
    alert(m()); //this指向window age=100 输出100
    var n=test();//this 指向window age=50
    alert(n()); //50
    
    答案: 100 50
    解析:
    1. 构造函数一旦返回一个对象,就不再创建新对象
    2. m获得的是function(){ return this.age; }
    3. n=test(),this指向window。先将全局变量age变为50,又返回一个函数function(){ return this.age; }保存在变量n中
    4. 调用n时,this指向window。

    2.判断以下程序的输出结果:
    var name="The Window";
    var obj={
        name:"My obj",
        getName:function(){
            return function(){
                return this.name;
            }
        }
    };
    console.log(obj.getName()());//let fn = obj.getName();let = function(){return this.name} let() this指向window 输出"The Window"
    
    答案:the window
    解析:
    1. obj.getName() 返回一个函数对象function(){ return this.name; }
    2. (function(){ return this.name; }()) 相当于匿名函数自调,this指向window

    3. 判断以下程序的输出结果:
    var length=10;
    function fn(){
        console.log(this.length);
    }
    var obj={
        length:5,
        method:function(fn){
            fn();
            arguments[0]();
        } 
    };
    obj.method(fn,1)
    
    答案:10,2
    解析:
    1. fn() this指向window,所以输出10
    2. arguments0 属于特殊情况,this->arguments,相当于arguments.0(), 所以,this指向arguments。所以length输出的是obj.method()的参数个数,为2.

    4. 统计一个字符串中出现次数最多的字符是? 共出现多少次
    let str = "helloworld";
    let arr = str.split("");
    let obj = {};
    let max=0;
    let maxOfLetter="";
    for(let val of arr){
        if(!obj[val]){
            obj[val]=1;
        }else{
            obj[val]++;
        }
        if(obj[val]>max){
            max = obj[val];
            maxOfLetter = val;
        }
    }
    console.log(maxOfLetter,max);
    
    
    答案:
    let str = "helloworld";
    let arr = str.split("");
    let obj = {};
    let max=1;
    let maxOfLetter="";
    for(let val of arr){
        if(!obj[val]){
            obj[val]=1;
        }else{
            obj[val]++;
            if(obj[val]>max){
                max = obj[val];
                maxOfLetter = val;
            }
        }
    }
    console.log(maxOfLetter,max);
    

    
    
    答案:
    解析:

    
    
    答案:
    解析:

    相关文章

      网友评论

          本文标题:东哥面试题

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