一道题加深对this的理解

function f(k){
    this.m=k
    return this
}

var m = f(1)
var n =f(2)

console.log(m)//2
console.log(n)//window
console.log(m.m)//undefined
console.log(n.m)//2

这道题理解起来比较吃力,所以记录一下:

(1)在执行发f(1)的时候没有所属对象,所以自动挂载在window上面,即this指向为window,this.m = window.m = 1;

(2)将f(1)返回的this赋值给全局变量m,所得 m = this,上面所说this == window的,可以得到 m = this = window, m是全局变量,就可以得到 m = window.m = window,覆盖了第一步window.m=1;

(3)执行f(2)函数时候,它和f(1)执行时候一样,没有所属对象,自动挂载到window上面,此时返回的this = window,此时 this.m = window.m = 2,覆盖了上一步的window.m = window;

(4)将f(2)返回的this赋值给全局变量n,所以 n = window,到此代码执行结束!

如果你认可上面的执行,我们来看打印值:

(1)console.log(m) 根据上面执行,m被覆盖了2次,第三步执行后返回最终m结果为:2

(2)console.log(n) 根据上面执行,第四步执行后返回最终n结果为:window

(3)console.log(m.m) 我们已经知道m = 2,一个数字没有属性,2.m =  undefined

(4)console.log(n.m) 我们知道 n =window,所以可以得到 n.m = window.m = m = 2

一些东西可能会恶心到我们,让我们怀疑,难受,但是只要你能静下心来,一点一点去理解它,它终究会成为你变强的垫脚石。

posted @ 2021-07-27 15:56  鸡腿太小  阅读(50)  评论(0编辑  收藏  举报