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);