11、爱前端的js进阶的考试

1.题:结果:2

原因:this的对象window,那么此时改变的是a

        var a = 1;
		function fn(){
			this.a++;
			a += 5;
			var a = 8;
		}
		fn();
		alert(a);

 2.题:结果:11

原因:fn()调用的时候的this指的是window,那么此时a就是1。fn.call(fn)的时候a就是fn的a了,此时的时候a是4,函数里面有var a=2,那么此时具有作用于隔离,此时的函数里面的a就是2

		var a = 1;
		function fn(){
			var a = 2;
			this.a++;
			return a + this.a;
		}
		fn.a = 4;
		var result = fn() + fn.call(fn);
		alert(result);

3.题。答案:2,0

原因:第一次的this指的是arr,第二次的this指的是window

          var arr = [fn1,fn2];
          function fn1(){
          		return this.length;
          }
          function fn2(){
          		return this[0];
          }
          var a = arr[0]();
          var b = arr[1]()();
          console.log(a);
          console.log(b);

4题。答案:12

原因:第二次的时候a变成了4

        var m = 1;
		var obj = {
			m : 2,
			fn : (function(){
				var a = 3;
				return function(){
					return this.m + ++a;
				}
			})()
		}
		var result = obj.fn.call(window) + obj.fn();
		alert(result);

5.答案:9

原因:第一次的this是指arr,length是2+7=9

        var arr = [fn1,fn2];
        function fn1(a,b,c){
        	return this.length;
        }
        function fn2(a,b,c,d){
        	return arguments.length;
        }
        var result = arr[0](1,2,3,4,5,6) + arr[1](1,2,3,4,5,6,7) + fn1(1,2);
        alert(result); 

 

6、答案:1、undefined、false、false

        Fun(para1,para2,para3){
	    var obj = {};
	    obj.para1 = para1;
	    obj.para2 = para2;
	    obj.para3 = para3;
	    return obj;
        }
        Fun.prototype.para4 = 4;
        var o = new Fun(1,2,3);
        console.log(o.para1);   
        console.log(o.para4);   
        console.log(o instanceof Fun);
        console.log(o.__proto__ == Fun.prototype);

7、答案:true

记住一句话:所有的函数的constructor都是Function因为无论是构造函数还是普通的函数都是函数

比如说Object,Function,Number,String等等都是构造函数

var obj = {};

var fun = function(){};

console.log(obj.constructor)

alert(obj.constructor.constructor == fun.constructor);

console.log(obj.constructor.constructor)

8、原因如上题

        console.log(Object instanceof Object); //true
        console.log(Function instanceof Function); //true
        console.log(Number instanceof Number); //false
        console.log(String instanceof String); //false
        console.log(Function instanceof Object);//true

9、答案:undefined

原因:o是函数。上面没有a属性

	    function Fun(){
	 		this.a = 5;
			function fun(){
				this.a = 10;	
			}
			return fun;
		}
		var o = new Fun();
		console.log(o.a);

猜你喜欢

转载自blog.csdn.net/sinat_36414515/article/details/81324330