フロントエンドの面接問題のやり方---ちょっと面白い(二)


一.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,Undefind,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
六.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