# this练习 注:document.write的题目 需要写出在页面上打印的结果 1. 下面代码的执行结果是什么 为什么 ``` var person = { firstName: "John", lastName : "Doe", id : 5566, fullName : function() { return this.firstName + " " + this.lastName; } }; // 显示对象的数据 document.getElementById("demo").innerHTML = person.fullName(); ``` 2. 下面代码的执行结果是什么 为什么 ``` var x = this; document.getElementById("demo").innerHTML = x; ``` 3. 下面代码的执行结果是什么 为什么 ``` "use strict"; var x = this; document.getElementById("demo").innerHTML = x; ``` 4. 下面代码的执行结果是什么 为什么 ``` document.getElementById("demo").innerHTML = myFunction(); function myFunction() { return this; } ``` 5. 下面代码的执行结果是什么 为什么 ``` "use strict"; document.getElementById("demo").innerHTML = myFunction(); function myFunction() { return this; } ``` 6. 下面代码的执行结果是什么 为什么 ```

JavaScript this 关键字

``` 7. 下面代码执行结果是什么 为什么 ``` var person = { firstName : "John", lastName : "Doe", id : 5566, myFunction : function() { return this; } }; // 显示表单数据 document.getElementById("demo").innerHTML = person.myFunction(); ``` 8. 把第7题的对象中的属性和方法挨个打印在页面上 9. 下面代码的执行结果是什么 为什么 ``` var person = { firstName: "John", lastName : "Doe", id : 5566, fullName : function() { return this.firstName + " " + this.lastName; } }; // 显示对象的数据 document.getElementById("demo").innerHTML = person.fullName(); ``` 10. 下面代码的执行结果是什么 为什么 ``` var person1 = { fullName: function() { return this.firstName + " " + this.lastName; } } var person2 = { firstName:"John", lastName: "Doe", } person1.fullName.call(person2); ``` 11. 下面代码的执行结果是什么 为什么 ``` function speak(){ var name = this.name console.log(`Hello I am ${name}`) } var me = { name: 'a', speak: speak } var you = { name: 'b', speak: speak } me.speak() you.speak() ``` 12. 下面代码的执行结果是什么 为什么 ``` function fn(){ console.log(this.name) } fn.name = 'xxx' fn() ``` 13. 下面代码的执行结果是什么 为什么 ``` function foo() { var a = 2; this.bar(); } function bar() { console.log( this.a ); } foo(); ``` 14. 下面代码的执行结果是什么 为什么 ``` function foo(){ console.log(this.a) } var a = 2 foo() ``` 15. 下面代码的执行结果是什么 为什么 ``` function foo() { console.log( this.a ); } var obj = { a: 2, foo: foo }; obj.foo(); ``` 14. 下面的fn中的this指向谁 ``` obj1.obj2.obj3.fn() ``` 15. 下面代码的执行结果是什么 为什么 ``` function foo() { console.log( this.a ); } var obj = { a: 2, foo: foo }; var bar = obj.foo; // 函数别名! var a = "xxxxx" bar(); ``` 16. 下面代码的执行结果是什么 为什么 ``` function foo() { console.log( this.a ); } var obj = { a: 2, foo: foo }; var a = "xxxxx" setTimeout( obj.foo ,100); ``` 17. 下面代码的执行结果是什么 为什么 ``` function foo(something) { console.log( this.a, something ); return this.a + something; } function bind(fn, obj) { return function() { return fn.apply( obj, arguments ); }; } var obj = { a:2 }; var bar = bind( foo, obj ); var b = bar( 3 ); // 2 3 console.log( b ); ``` 18. 下面代码的执行结果是什么 为什么 ``` const test = { prop: 42, func: function() { return this.prop; }, }; console.log(test.func()); ``` 19. 下面代码的执行结果是什么 为什么 ``` console.log(this === window); a = 37; console.log(window.a); this.b = "MND"; console.log(window.b) console.log(b) ``` 20. 下面代码的执行结果是什么 为什么 ``` function f1(){ return this; } //在浏览器中: f1() === window; //在浏览器中,全局对象是window //在Node中: f1() === globalThis; ``` 21. 下面代码的执行结果是什么 为什么 ``` function f2(){ "use strict"; // 这里是严格模式 return this; } f2() === undefined; ``` 22. 下面代码的执行结果是什么 为什么 ``` var obj = {a: 'Custom'}; var a = 'Global'; function whatsThis() { return this.a; } whatsThis(); whatsThis.call(obj); whatsThis.apply(obj); ``` 23. 下面代码的执行结果是什么 为什么 ``` function C(){ this.a = 37; } var o = new C(); console.log(o.a); function C2(){ this.a = 37; return {a:38}; } o = new C2(); console.log(o.a); ``` 24. 下面代码的执行结果是什么 为什么 ``` ```