this

先说明一下,this是我JavaScript的盲区,写这篇文章,就是为了让自己能重新认识this,并且搞清楚,js里面的this,到底是什么。 这个系列主要是记录我自己看《你不知道的JavaScript》这本书的笔记。

this的定义:执行上下文。
这句话理解起来,很费劲。这本书也是举了好几个例子来说明,这句话的含义。我个人也认为,不通过代码,非常难说明问题。

exp1:

function fn() {
    console.log('fn', this)
}

fn() 
// log: 
// fn, 
// Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}

这个例子非常简单,一般也能看出输出的this是window,原因很简单,这个fn是全局函数,也是在全局作用域下运行的,所以执行上下文,可以理解为执行作用域,就是window。

exp2:

var count = 0;
function fn(num) {
    console.log('你说几就几:'+num)
    this.count += 5
}

fn.count=1

fn(2) // 你说几就几:2
console.log(fn.count) // 1
console.log(count) // 5

这个例子,执行 fn.count 和 fn内部的 this.count其实没什么关系。因为fn在执行的时候,执行上下文还是window。所以,this.count += 5修改的是全局的count,并不是fn自身的count。

exp3:

function fn() {
    this.count = 1;
    function myFoo() {
        this.count +=2;
    }
    myFoo()
    console.log(this.count)
}
fn() // 3

未完待续。。。


pillarBoy
1 声望0 粉丝

进步,从分享开始。分享,从笔记做起。


下一篇 »
数据结构