前端面试题套路-----有点意思(二)

一.JQuery 中 $.fn.extend 函数的实现(实现核心代码即可)

//关键:修正参数deep、target、源对象的起始下标 => 逐个遍历源对象    
jQuery.extend = jQuery.fn.extend = function() {
    /** 
     * options: 指向某一个源对象
     * name: 代表某个源对象里的某个属性名
     * src: 代表某个源对象里的某个属性的原始的值
     * copy: 表示某个源对象里的某个属性的值
     * copyIsArray: 表示变量copy是否为数组
     * clone: 表示进行深度复制时原始值的修正值
     * target: 指向目标对象
     * deep: 表示是否执行深度复制,默认为false不进行
     */
    var options, name, src, copy, copyIsArray, clone,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length,
        deep = false;

    //如果第一个参数时布尔值,就把第二个参数当做是目标对象
    if ( typeof target === "boolean" ) {
        deep = target;
        target = arguments[ i ] || {};
        i++;
    }
    //如果目标对象不是对象或者一个函数,那就当作 空对象 处理
    if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
        target = {};
    }
    //没有传入源对象的情况(1,只有一个参数 2,第一个参数时deep值,第二个参数是参数)
    if ( i === length ) {
        target = this;
        i--;
    }

    for ( ; i < length; i++ ) {
        if ( (options = arguments[ i ]) != null ) {
            for ( name in options ) {
                src = target[ name ];
                copy = options[ name ];

                if ( target === copy ) {
                    continue;
                }
                //覆盖掉同名属性
                if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
                    if ( copyIsArray ) {
                        copyIsArray = false;
                        clone = src && jQuery.isArray(src) ? src : [];

                    } else {
                        clone = src && jQuery.isPlainObject(src) ? src : {};
                    }

                    target[ name ] = jQuery.extend( deep, clone, copy );

                } else if ( copy !== undefined ) {
                    target[ name ] = copy;
                }
            }
        }
    }
    return target;
};

二.隐藏元素的几种方法:

1.display:none
2.visibility:hidden
3.opacity:0
4.position:absolute;left:-10000px;

三.javascript有几种数据类型?

1.基本数据类型:String,Number,Boolean,Undefined,Null
2.复杂数据类型:Object

四.问下面依次输出什么?

  var a = 10;
  function test(){
      var b = 2 * a;
      var a = 20;
      var c = a / 2;
      console.log(b);
      console.log(c);
   }
   test();

答案:NaN,10

五.问下面依次输出的是什么?

var name = "珠宝1";
function test2(){
    alert(tt);
    var tt = "珠宝2";
    alert(tt);
}
test2();

答案:undefined,珠宝2

六.定义一个log方法,让它可以代理console.log的方法

var log = console.log.bind(console);

七.以下代码输出的是什么?

console.log(1);
setTimeout(function(){console.log(2)},1000);
setTimeout(function(){console.log(3)},0);
console.log(4);

答案:1,4,3,2

八.以下代码输出的是什么?

alert(0/0);//NaN
alert(1/0);//infinity(无穷大)

for(var i = 0,j = 0; i < 10, j < 6; i++, j++){
    value = i + j;
}
alert(value);//10

var arr = [1,'abc',function(){alert(3333);}];
alert(arr[2]());
arr[2]();//3333,undefined,3333

猜你喜欢

转载自blog.csdn.net/diaoweixiao/article/details/80729552
今日推荐