今天總結了幾道,感受很是有意思的題,有感興趣的能夠看下,有疑問請留言~
(答案在最後)函數
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原型