美文网首页
javascript面试题1

javascript面试题1

作者: woshixixi | 来源:发表于2018-02-14 11:30 被阅读0次
    /**
     * 1. 设计函数:f(a,b) = f(a)(b) = a + b
     *   因为:result1 = f(a) = function(b){...}
     *   因此:result1(b) = a + b
     */
    function f(a) {
        if(arguments.length==1) {
            return function(b) {
                return a + b
            }   
        }else {
            return a + arguments[1];
        }
    }
    console.log(f(2)(3));
    console.log(f(2,3));
    
    
    /**
     * 块级作用域 for 循环中var 的改写
     * 闭包只能取得包含函数的最后一个值
     */
    
    (function(){
        for(var i = 0; i<10; i++){
            (function(j){
                setTimeout(function(){
                    console.log(j);
                },0);   
            })(i)
        }       
    })()
    
    /**
     * this 指的是执行上下文环境
     * 
     * 
     */
    
    /**
     * 浅拷贝
     */
    var obj = { a:1, arr: [2,3] };
    var shallowObj = shallowCopy(obj);
    
    function shallowCopy(src) {
      var dst = {};
      for (var prop in src) {
        if (src.hasOwnProperty(prop)) {
          dst[prop] = src[prop];
        }
      }
      return dst;
    }
    
    
    /**
     * 深拷贝
     */
    
    var cloneObj = function(obj){
        var str, newobj = obj.constructor === Array ? [] : {};
        if(typeof obj !== 'object'){
            return;
        } else if(window.JSON){
            str = JSON.stringify(obj), //系列化对象
            newobj = JSON.parse(str); //还原
        } else {
            for(var i in obj){
                newobj[i] = typeof obj[i] === 'object' ? 
                cloneObj(obj[i]) : obj[i]; 
            }
        }
        return newobj;
    };
    
    /**
     * *数组合并
     */
    //利用concat
    function concat(arr1, arr2) {
        return arr1.concat(arr2);
    }
    //利用slice+push.apply
    function concat(arr1, arr2) {
        var newArr=arr1.slice(0);
        [].push.apply(newArr, arr2);
        return newArr;
    }
    //利用slice+push
    function concat(arr1, arr2) {
        var newArr=arr1.slice(0);
        for(var i=0;i<arr2.length;i++){
            newArr.push(arr2[i]);
        }
        return newArr;
    }
    //普通的迭代拷贝
    function concat(arr1, arr2) {
        var newArr=[];
        for(var i=0;i<arr1.length;i++){
            newArr.push(arr1[i]);
        }
        for(var j=0;j<arr2.length;j++){
            newArr.push(arr2[j]);
        }
        return newArr;
    }
    
    

    相关文章

      网友评论

          本文标题:javascript面试题1

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