我试图理解Javascriptthis上的关键字.
我正在对chrome控制台进行一些测试,我遇到了两个不同的结果,我期望它们是相同的:
var myTest = {};
myTest.test1 = function() {
return this; // this = Object
}
Run Code Online (Sandbox Code Playgroud)
第一个函数返回myTest我理解的对象.
var myTest = {};
myTest.test1 = function() {
return function test2() {
return this; // this = Window
}
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个函数返回窗口而不是myTest对象?
谢谢
this是指调用函数的当前对象.当你打电话时test1,你会这样做的
myTest.test1()
Run Code Online (Sandbox Code Playgroud)
现在,test1被称为myTest对象.这就是为什么在第一种情况下this提到的原因myTest.
在第二种情况下,你会这样执行
myTest.test1()()
Run Code Online (Sandbox Code Playgroud)
myTest.test1()返回一个函数,你在没有任何当前对象的情况下调用.在这种情况下,JavaScript将确保this将引用全局对象(window在本例中).
注意:但是,在严格模式下,this将undefined在第二种情况下.你可以这样确认
var myTest = {};
myTest.test1 = function() {
return function test2() {
console.log("this is global", this === window);
console.log("this is undefined", this === undefined);
return this;
}
}
myTest.test1()();
Run Code Online (Sandbox Code Playgroud)
输出将是
this is global true
this is undefined false
Run Code Online (Sandbox Code Playgroud)
但如果你包括use strict这样的话
"use strict";
var myTest = {};
myTest.test1 = function() {
return function test2() {
console.log("this is global", this === window);
console.log("this is undefined", this === undefined);
return this;
}
}
myTest.test1()();
Run Code Online (Sandbox Code Playgroud)
输出将是
this is global false
this is undefined true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |