大型 网站的建设 阶段,邢台123最新事件,汉鼎网站建设,什么是网站推广优化https://juejin.cn/post/6844904083707396109 任何函数运行的时候#xff0c;都会创建一个context对象#xff0c;context对象有一个this对象#xff0c;在运行的时候决定。任何函数都对应一个reference类结构体#xff08;具体叫啥有点忘了#xff09;#xff0c;简单就… https://juejin.cn/post/6844904083707396109 任何函数运行的时候都会创建一个context对象context对象有一个this对象在运行的时候决定。任何函数都对应一个reference类结构体具体叫啥有点忘了简单就抽象成这样Reference{ base ,name} base对应就是thisname就是函数名称this 的范围最近的{}
举个例子自己慢慢悟吧。
function foo(){} // 对应 {base:window,name:foo};
let a{ foo }
a.foo(); // 对应 {base:a,name:foo} 简单粗暴的方法就是去分析f()在运行的时候它的base是什么 base为null就是window/全局。 那怎么判断base呢就是看f()前面有没有 .
var obj1 {a: 1
}----------var obj2 {a: 2,foo1: function () {console.log(this.a)},foo2: function () { // 分析obj2.foo2(); setTimeout(function () { // 运行这个函数的时候没有. 指向全局呗 和setTimeout没关系console.log(this)console.log(this.a)}, 0)}
}
var a 3obj2.foo1()
obj2.foo2()function foo () {console.log(this.a)return function () {console.log(this.a)}
}
var obj { a: 1 }
var a 2foo() // 2 foo是一串代码foo()是执行这串代码返回的是一串代码返回的这串代码没执行
foo.call(obj) // 1 foo这串代码绑定this为obj并执行。 相当于this指向obj然后执行foo();
foo().call(obj) // 2 1 foo()执行并返回新函数执行新函数并把新函数的this指向obj