先說明一下,this是我JavaScript的盲區,寫這篇文章,就是爲了讓本身能從新認識this,而且搞清楚,js裏面的this,究竟是什麼。 這個系列主要是記錄我本身看《你不知道的JavaScript》這本書的筆記。函數
this的定義:執行上下文。
這句話理解起來,很費勁。這本書也是舉了好幾個例子來講明,這句話的含義。我我的也認爲,不經過代碼,很是難說明問題。post
exp1:this
function fn() { console.log('fn', this) } fn() // log: // fn, // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
這個例子很是簡單,通常也能看出輸出的this是window,緣由很簡單,這個fn是全局函數,也是在全局做用域下運行的,因此執行上下文,能夠理解爲執行做用域,就是window。code
exp2:ip
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:io
function fn() { this.count = 1; function myFoo() { this.count +=2; } myFoo() console.log(this.count) } fn() // 3
未完待續。。。console