今天总结了几道,感受很是有意思的题,有感兴趣的能够看下,有疑问请留言~
(答案在最后)函数
var n = 2, obj = { n:2, fn:(function(n){ n*=2; this.n+=2; console.log(this.n); console.log(window.n); return function(m){ this.n*=2; console.log(m+(++n)) } }(n) }; var fn = obj.fn; fn(3); obj.fn(3) console.log(n,obj.n);
function Fn() { var n = 100; this.AA = function () { } this.BB = function () { } } Fn.prototype.AA = function () { } var f1 = new Fn(); var f2 = new Fn; console.log(f1.n); console.log(f1.AA === f2.AA); console.log(f1.__proto__.AA === f2.AA) console.log(f1.__proto__.AA === f2.__proto__.AA) console.log(f1.__proto_.AA === Fn.prototype.AA) console.log(f1.hasOwnProperty('AA') === Fn.prototype.hasOwnProperty('AA'));
比较简单的一道题this
console.log(a); a = 20; function fn(){ console.log(a) var a = 12; } fn(); console.log(a)
考察变量提高prototype
var foo = 1; function fn(){ if(!foo){ var foo = 12; } console.log(foo); } fn();
5) 函数形参变量和arguments存在映射
函数默认返回undefinedcode
var a = 4; function test(x,y,a){ console.log(a); arguments[2] = 100; console.log(a) } a = test(1,2,3); console.log(a)
6) 函数形参变量和arguments映射创建在函数执行形参赋值的一刻
形参和实参一一对应,多出来的不创建映射对象
function fn(x,y){ var arg = arguments; arg[0] = 100; var y = 200; arg[1] = 300; console.log(y); } fn(20);7) 逻辑与 逻辑或
console.log(0||1&&2||0||3&&2||1)
8) 仍是考察this原型链
var num = 10; var obj = {num:20}; obj.fn = (function(num){ num = this.num + 10; this.num = num + 10; return function(){ this.num += ++num; } })(num) var fn = obj.fn; fn(); obj.fn(); console.log(num,obj.num)
9) 很长的一段
function Fn(){ this.x = 100; this.y = 200; this.getX = function(){ console.log(this.x) } } Fn.prototype.getX = function(){ console.log(this.x) } Fn.prototype.getY = function(){ console.log(this.y) } var f1 = new Fn; var f2 = new Fn; console.log(f1.getX === f2.getX); console.log(f1.getY === f2.getY); console.log(f1.__proto__getY === Fn.prototype.getY); console.log(f1.__proto__.getX === f2.getX); console.log(f1.getX === Fn.prototype.getX); console.log(f1.constructor); console.log(Fn.prototype.__proto__.constructor); f1.getX(); f1.__proto__.getX(); f2.getY(); Fn.prototype.getY();
10)仍是this得问题(发现了好多this的题)
var name = 'window'; var Tom = { name:'Tom', show:function(){ console.log(this.name) }, wait:function(){ var fun = this.show; fun(); } } Tom.wait();
答案:get
1) 9
10
8 6
2) undefined
false
false
true
true
true
3) a is not defined
4) 12
5) 3
100
undefined
6) 200
7) 2(逻辑与的优先级高于逻辑或)
8) 51 42
9) false
true
true
false
false
Fn
Object
100
undefined;this:f1.__proto__ ,上面没有x,因此是undefined
200
undefined;this:Fn.prototype,上面没有y,因此是undefined
10) window原型