成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

你們真的了解閉包嗎?

bigdevil_s / 551人閱讀

摘要:前言我們知道所謂的閉包指的就是有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量對(duì)象的函數(shù),但是你們真的了解的閉包嗎就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識(shí),我就簡(jiǎn)單說(shuō)說(shuō)概念簡(jiǎn)單幾行代碼,先說(shuō)說(shuō)作用域鏈的流程,運(yùn)行到時(shí),會(huì)將作用域鏈保存到中執(zhí)行到時(shí)會(huì)創(chuàng)建執(zhí)行環(huán)境,并將

前言

我們知道所謂的閉包指的就是有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量對(duì)象的函數(shù),但是你們真的了解JS的閉包嗎?就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識(shí),我就簡(jiǎn)單說(shuō)說(shuō)

概念
var a = "july";
function test () {
    var b = "mirok";
    return function() {
        var c = "inner"
        console.log(a);
        console.log(b);
    }
}
test()(); // mirok,july
console.log(c); // error: undefined

簡(jiǎn)單幾行代碼,先說(shuō)說(shuō)作用域鏈的流程,運(yùn)行到test()時(shí),會(huì)將作用域鏈保存到[[Scope]]中,執(zhí)行到test()時(shí)會(huì)創(chuàng)建執(zhí)行環(huán)境,并將復(fù)制[[Scope]]對(duì)象構(gòu)建執(zhí)行函數(shù)的作用域鏈。我們知道作用域鏈尋找規(guī)則是往前找的,而閉包是能夠?qū)⑼獠亢瘮?shù)的活動(dòng)對(duì)象添加到作用域鏈中的,所以test函數(shù)里的閉包就包含了全局的活動(dòng)對(duì)象和test的活動(dòng)對(duì)象,自然就能輸出a和b

注意

閉包需要注意的點(diǎn)是它只取外部函數(shù)變量最后一個(gè)值,例如以下demo:

 function test (){
    var arr = [];
    for (var i=0; i<3; i++) {
        arr[i] = function() {
            return i;
        }
    }
    return arr;
}
for (var i =0; i < test().length; i++) {
    console.log(test()[i]())
}
// 輸出三個(gè)3

也就是說(shuō)閉包里作用鏈中的外部函數(shù)的活動(dòng)對(duì)象一直都是i,因?yàn)樽饔糜蜴溒鋵?shí)是指向活動(dòng)對(duì)象的指針列表,所以當(dāng)test返回時(shí)i是3,閉包里的也自然是都是3

this指向問(wèn)題

我們知道this指向函數(shù)的執(zhí)行環(huán)境,全局中調(diào)用指向window,對(duì)象調(diào)用指向該對(duì)象,但是在對(duì)象中函數(shù)的閉包的this又指向哪呢?先上代碼

var env = "window";
const obj = {
    env: "Obj",
    showEnv: function() {
        return function() {
            console.log(this.env)// 輸出window
        }
    }
}

輸出window因?yàn)楸旧淼膖his在閉包中就已經(jīng)存在,因此不會(huì)去尋找Obj的this,再不通過(guò)call和apply調(diào)用的情況下,匿名函數(shù)的this指向window的

其實(shí)閉包就是這樣一塊東西
function test() {
    var a = "mirok";
    function show () {
        var b = "july";
        console.log(this);
        return a;
    };
    this.fun = show;
}
const obj = new test();
obj.fun(); // mirok

看看Scopes就知道閉包是什么啦~很容易就能理解的

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96838.html

相關(guān)文章

  • 你們真的了解JS的事件?

    摘要:基礎(chǔ)最后一篇啦,蹭著周六日趕緊寫(xiě)完,其他的都是的或者瀏覽器能力,高級(jí)技巧,使用等雜七雜八的知識(shí)點(diǎn),這里就不一一介紹了,平時(shí)編碼也用不太到,有興趣的可以找找相關(guān)的書(shū)籍前言先說(shuō)說(shuō)事件流吧,事件流就是從從開(kāi)始到目標(biāo)節(jié)點(diǎn)之前的節(jié)點(diǎn)進(jìn)行事件的捕獲,在 基礎(chǔ)最后一篇啦,蹭著周六日趕緊寫(xiě)完,其他的都是DOM,BOM的api或者瀏覽器能力,高級(jí)技巧,Canvas使用等雜七雜八的知識(shí)點(diǎn),這里就不一一介紹...

    douzifly 評(píng)論0 收藏0
  • 面試小結(jié)--前端面試的幾個(gè)雷點(diǎn)

    摘要:前言得益于金三銀四,在最近一段時(shí)間,面試了一些人,但是符合的寥寥無(wú)幾??吹轿业拿嬖囶}自己寫(xiě)的面試題,自己想的答案。聽(tīng)人說(shuō)過(guò)一個(gè)面試套路面試官問(wèn)的問(wèn)題,可能面試官自己都不懂,目的只是為了壓工資,挫士氣。不過(guò)我是為了測(cè)試面試者是不是真的精通。 技術(shù)在不斷的創(chuàng)新,隨著框架,庫(kù),構(gòu)建工具,打包工具,版本控制工具等操作越來(lái)越方便,使用越來(lái)越簡(jiǎn)單。面對(duì)這樣的情況,除了興奮,也要警惕。這些工具使得開(kāi)...

    idealcn 評(píng)論0 收藏0
  • 嗨,你真的懂this

    摘要:任何一個(gè)函數(shù)都可以使用來(lái)調(diào)用,因此其實(shí)并不存在構(gòu)造函數(shù),而只有對(duì)于函數(shù)的構(gòu)造調(diào)用。不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用命令,否則會(huì)拋出一個(gè)錯(cuò)誤。 this關(guān)鍵字是JavaScript中最復(fù)雜的機(jī)制之一,是一個(gè)特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域中,但是相信很多JsvaScript開(kāi)發(fā)者并不是非常清楚它究竟指向的是什么。聽(tīng)說(shuō)你很懂this,是真的嗎? 請(qǐng)先回答第一個(gè)問(wèn)題:如何準(zhǔn)...

    morgan 評(píng)論0 收藏0
  • 你們真的了解JS的繼承嘛?

    摘要:這又是什么呢這個(gè)相對(duì)之前的比較復(fù)雜,但是高效的一點(diǎn)是只調(diào)用一次被繼承者構(gòu)造函數(shù)原理就是通過(guò)寄生方式創(chuàng)建一個(gè)被繼承者的副本,副本和被繼承者共用一個(gè)這樣就解決了之前的問(wèn)題返回的一個(gè)副本設(shè)置指向因?yàn)樾赂北镜脑蛯?duì)象被重寫(xiě)副本作為的原型對(duì)象 前言 我們學(xué)JAVA的時(shí)候說(shuō)到繼承就是一個(gè)extends ClassName的事情,但是在JS的世界里繼承和我們?cè)贘AVA所認(rèn)識(shí)的繼承實(shí)現(xiàn)方法又有一些不同...

    ssshooter 評(píng)論0 收藏0
  • Know this, use this! (總結(jié) this 的常見(jiàn)用法)

    摘要:而當(dāng)做普通函數(shù)調(diào)用的話,實(shí)際上即第種情況下,對(duì)函數(shù)普通調(diào)用,此時(shí)的指向這是正常情況下,會(huì)正確返回并且指向該對(duì)象,但是在構(gòu)造函數(shù)當(dāng)中,如果返回了一個(gè)對(duì)象,那么會(huì)指向返回的那個(gè)對(duì)象。 this應(yīng)該是一個(gè)討論了很久的話題了。其中,關(guān)于this的文章,在很多的博客當(dāng)中也有很多介紹,但是,以前我都是一知半解的去了解它,就是看博客當(dāng)中,只介紹了一些情況下的 this 的使用方式,但是也并沒(méi)有自己去...

    zorro 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<