原型鏈、閉包、作用域
阿新 • • 發佈:2018-12-12
先看一段程式碼:
function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); //控制檯輸出1,再輸出2
簡單吧。再來看一段程式碼:
function a(){ var n = 0; this.inc = function () { n++; console.log(n); }; } var c = new a(); c.inc(); //控制檯輸出1 c.inc(); //控制檯輸出2
簡單吧
什麼是閉包?這就是閉包!
有權訪問另一個函式作用域內變數的函式都是閉包。
這裡 inc 函式訪問了建構函式 a 裡面的變數 n,所以形成了一個閉包。再來看一段程式碼:
function a(){ var n = 0; function inc(){ n++; console.log(n); } return inc; } var c = a(); c(); //控制檯輸出1 c(); //控制檯輸出2
看看是怎麼執行的:
var c = a(),這一句 a()返回的是函式 inc,那這句等同於 var c = inc;
c(),這一句等同於 inc(); 注意,函式名只是一個標識(指向函式的指標),而()才是執行函式。
後面三句翻譯過來就是: var c = inc; a(); inc();,跟第一段程式碼有區別嗎? 沒有。