亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【面試系列】之三:關(guān)于閉包和遞歸

2501207950 / 670人閱讀

摘要:之三關(guān)于閉包和遞歸開(kāi)篇這一期本來(lái)是打算寫閉包的,但是無(wú)意中看到高級(jí)程序設(shè)計(jì)中閉包的前一章就是遞歸。閉包練習(xí)題這個(gè)板塊會(huì)實(shí)時(shí)補(bǔ)充的關(guān)于遞歸其實(shí)說(shuō)到遞歸,主要就是要說(shuō)這個(gè)的用法,其實(shí)主要就是調(diào)用自己的外圍函數(shù),并且可以傳參。

之三:關(guān)于閉包和遞歸 1. 開(kāi)篇

這一期本來(lái)是打算寫閉包的,但是無(wú)意中看到《JavaScript高級(jí)程序設(shè)計(jì)》中閉包的前一章就是遞歸。
所以拿出來(lái)一起講一下吧!

我覺(jué)得閉包算是筆試面試中??嫉?,當(dāng)面試官問(wèn)道閉包的時(shí)候?;蛟S人人都會(huì)說(shuō)上:從表象上看,閉包是內(nèi)部函數(shù)引用外部函數(shù)的變量,導(dǎo)致內(nèi)部函數(shù)引用的變量不會(huì)被釋放。即使外部函數(shù)被銷毀時(shí),變量依然駐留在內(nèi)存中!
可是大家真的懂這句話的意思嗎(在深入了解之前,我也不明白)
今天就讓我們來(lái)好好了解一下:

2. 閉包的原理

先看一段代碼:

// 需求時(shí)是一秒鐘之后,在控制臺(tái)依此輸出1-10
function numberLog() {
    for (var i = 1;i <= 10;i++) {
        setTimeout(function () {
            console.log(i)
        }, 1000)
    }
}
numberLog();

大家覺(jué)得上面的代碼,能實(shí)現(xiàn)預(yù)期的需求嗎?
當(dāng)然不能,代碼的執(zhí)行速度很快,我們循環(huán)了十次,生成了十個(gè)setTimeout(function(){console.log(i)}, 1000),
然后當(dāng)一秒鐘過(guò)去了,i早就變成11了,所以最后就會(huì)輸出10個(gè)11

那么怎么改進(jìn)呢?
看這段代碼:

function numberLog() {
    for (var i = 1;i <= 10;i++) {
        (function (count) {
            setTimeout(function () {
                return console.log(count)
            }, 1000)
        })(i)
    }
}
numberLog();

這次再看一下,在控制臺(tái)上會(huì)輸出1-10
這是為什么?其實(shí)看不懂也沒(méi)有關(guān)系,就是簡(jiǎn)單的舉了一個(gè)閉包的應(yīng)用場(chǎng)景。

下面具體說(shuō)一下,只需要記住以下幾點(diǎn):

當(dāng)一個(gè)函數(shù)執(zhí)行時(shí),全局會(huì)為這個(gè)函數(shù)做兩件事:1.構(gòu)建一個(gè)獨(dú)立的函數(shù)環(huán)境 2.把全局的變量用作用域鏈的形式推給這個(gè)函數(shù),換句簡(jiǎn)單的話說(shuō)就是讓這個(gè)函數(shù)可以訪問(wèn)到它外層定義的變量,并可以一層一層的向外引用

如果一個(gè)函數(shù)里面嵌套了一個(gè)函數(shù),并且這個(gè)內(nèi)部函數(shù)引用外層函數(shù)的變量,那個(gè)這個(gè)變量就不能在外層函數(shù)結(jié)束后被釋放(正常是函數(shù)調(diào)用完,環(huán)境和變量就都會(huì)被釋放),因?yàn)椴恢纼?nèi)部函數(shù)在什么時(shí)候就會(huì)被調(diào)用。

那上面這個(gè)例子是怎么回事呢?
我們可以看到在循環(huán)代碼內(nèi)我們執(zhí)行了一個(gè)函數(shù)立即調(diào)用,并且返回一個(gè)console.log(XX)
由于立即調(diào)用的這個(gè)函數(shù)引用了外部函數(shù)numberLog的變量i,因此i從1-10都不會(huì)被釋放,都會(huì)在內(nèi)部形成一個(gè)閉包空間。
當(dāng)一秒鐘過(guò)去,還是會(huì)打印出 1-10

不知道這么說(shuō),你明白沒(méi)有,不太懂的話請(qǐng)看書(shū)《JavaScript高級(jí)程序設(shè)計(jì)》第七章閉包那一節(jié)。

3. 閉包練習(xí)題

這個(gè)板塊會(huì)實(shí)時(shí)補(bǔ)充的

4. 關(guān)于遞歸

其實(shí)說(shuō)到遞歸,主要就是要說(shuō)callee這個(gè)的用法,callee其實(shí)主要就是調(diào)用自己的外圍函數(shù),并且可以傳參。
下面我們來(lái)看一個(gè)題(我面試百度時(shí)的題):

// 用setTimeout來(lái)模擬setInterval

先留個(gè)懸念哈!

5. 最后

今天是周日,下周會(huì)有一個(gè)百度糯米的面試!現(xiàn)在感覺(jué)自己的js的基礎(chǔ)有些薄弱,
所以下一節(jié)會(huì)說(shuō)一下js原生的dom操作,一起加油喲!

歡迎大家指出不足和意見(jiàn),我會(huì)虛心接受

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80122.html

相關(guān)文章

  • JavasScript重難點(diǎn)知識(shí)

    摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過(guò)多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...

    forsigner 評(píng)論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開(kāi)發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實(shí)現(xiàn)文件分片斷點(diǎn)續(xù)傳。 Vue.js 插件開(kāi)發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。插....

    izhuhaodev 評(píng)論0 收藏0
  • 關(guān)于個(gè)人第一天前端面試面試問(wèn)答QA,希望能對(duì)其他找前端工作的朋友有所幫助。

    摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫的入門指南,對(duì)象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過(guò)大家的建議與鼓勵(lì),于是修改了簡(jiǎn)歷,開(kāi)始了重新投遞,2天后接到第一份面試邀請(qǐng)。 此文為個(gè)人面試經(jīng)歷,QA問(wèn)答過(guò)程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過(guò)我的大佬看到博客,歡迎指出問(wèn)題。 循序...

    Youngdze 評(píng)論0 收藏0
  • 前端知識(shí)點(diǎn)整理

    摘要:難怪超過(guò)三分之一的開(kāi)發(fā)人員工作需要一些知識(shí)。但是隨著行業(yè)的飽和,初中級(jí)前端就業(yè)形勢(shì)不容樂(lè)觀。整個(gè)系列的文章大概有篇左右,從我是如何成為一個(gè)前端工程師,到各種前端框架的知識(shí)。 為什么 call 比 apply 快? 這是一個(gè)非常有意思的問(wèn)題。 作者會(huì)在參數(shù)為3個(gè)(包含3)以內(nèi)時(shí),優(yōu)先使用 call 方法進(jìn)行事件的處理。而當(dāng)參數(shù)過(guò)多(多余3個(gè))時(shí),才考慮使用 apply 方法。 這個(gè)的原因...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<