javascript面试题1

/**
 * 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

你可能感兴趣的:(javascript面试题1)