什么是閉包,閉包的表現形式:
// 作用域應用的特殊情況,有兩種表現: // 函式作為引數被傳遞 // 函式作為回傳值被回傳 // 函式作為回傳值 function create() { let a = 100 return function () { console.log(a) } } let fn = create(); let a = 200; fn() //函式作為引數 function print(fn) { let b = 200; fn() } let b = 100; function fnb() { console.log(b) } print(fnb) // 閉包:自由變數的查找,是在函式定義的地方向上級作用域查找,不是在執行的地方,
this的使用場景:
- 作為普通函式呼叫
- 使用call、apply、bind 呼叫
- 作為物件方法被呼叫
- 在class方法中呼叫
- 箭頭函式
實際開發中閉包的應用:
隱藏資料,如做一個簡單的cache工具,閉包隱藏資料,只提供API,function createCache() { const data = {} // 閉包中的資料被隱藏,不被外界訪問 return { set: function (key, val) { return data[key] = val }, get: function (key) { return data[key] } } } const c = new createCache() c.set('name','aaa') console.log(c.get('name'))
寫出下列代碼的輸出:
var x = 2; var y = { x: 3, z: (function (x) { this.x *= x; x += 2; return function (n) { this.x *= n; x += 3; console.log(x) } })(x) } var m = y.z m(4); y.z(5); console.log(x, y.x);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/11183.html
標籤:JavaScript
