<script>
function fn1() {
console.log(this);
}
fn1(); //第一次调用fn1:window
class People {
excutor(fn1) {
function fn2() {
console.log(this);
}
fn1(); // 第二次调用fn1:window
console.log(this); // p
fn2(); // undefined
}
}
let p = new People();
p.excutor(fn1);
</script>
根据 “JS中函数的this为其调用者”
第一个问题:
fn1第一次被调用在window中,所以其输出为window,第二次将其作为参数传入p.excutor()中调用,为什么this还是window?
第二个问题:
fn2在Person中的excutor中定义,根据ES6语法,class中默认是严格模式,所以在p.excutor()中调用fn2其this是undefined。如果将fn2放在非class环境中调用为什么fn2的this还是undefined?
第三个问题:
综合以上现象,是否能说明 “JS中函数的this并不是其调用者的this,而是其被定义时所处环境的this”? 比如:fn1在window中定义所以fn1的this一直是window,fn2在class中定义所以fn2的this一直是undefined?
第一个问题:“JS中函数的this为其调用者”,你传入哪里不重要,重要的谁调用的。
fn1()
看做window.fn1()
第二个问题:“JS中函数的this为其调用者” 。严格模式是严格模式。但是和你说的环境无关。还是去找调用,代码中没有看到你如何构建环境。
第三个问题:“JS中函数的this为其调用者” 。你这里偷换了概念
JS中函数的this并不是其调用者的this
, 一直说的都是调用者,你为什么要加的this
fn1()
看做window.fn1()
注意这里。你的例子本身就没有体现出调用者,只体现出了定义者和执行环境