JS閉包

1、什麼是閉包?

做用域應用的特殊狀況(有兩種):
函數做爲參數被傳遞
函數做爲參數被返回閉包

1.函數做爲參數被傳遞:

function print(fn){
    let a = 200
    fn()
}
let a = 100
function fn(){
    console.log(a)
}

print(fn)

//100

2.函數做爲參數被返回

function create(){
    let a = 100
    return function(){
        console.log(a)
    }
}

let fn = create()
let a = 200
fn()

//100

3.自由變量

什麼是自由變量?

當前做用域沒有定義可是使用了,須要咱們去沿着做用域鏈查找的變量。函數

自由變量的查找規則?

在函數定義的地方,向上級做用域查找,而不是執行的地方!!!工具

2、實際開發過程當中閉包的應用

好比隱藏數據(作一個簡單的cache工具)

function createCache(){
        let data = {}  //閉包中的數據,被隱藏,不被外界訪問
        return {
            set(val, key){
                data[val] = key
            },
            get(key){
                return data[key]
            }
        }
    }

    let c = createCache()
    c.set('a', 100)
    console.log(c.get('a'))
    //100(這樣就只能經過c.get和c.set來訪問和設置data, 而不能再函數外隨意修改和獲取data的值)
相關文章
相關標籤/搜索