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

資訊專欄INFORMATION COLUMN

微信小程序開發(fā)教程(基礎(chǔ)篇)4-關(guān)于回調(diào)函數(shù),匿名函數(shù),閉包的雜談

shixinzhang / 668人閱讀

摘要:而回調(diào)函數(shù)通常只是提供給其它模塊進(jìn)行調(diào)用,為了簡化編碼,后續(xù)的等腳本語言中提供了對匿名函數(shù)的支持。當(dāng)使用回調(diào)函數(shù)時,通常會涉及到一些上下文的傳遞。

嚴(yán)格來說,這不能算是一篇微信小程序教程,不過會使用到上一篇中的app.js代碼作為示例,姑且充個數(shù)吧。

回調(diào)函數(shù)

回調(diào)函數(shù),對于初入編程這一行的同學(xué)可能會有些難以理解,畢竟回調(diào)函數(shù)的使用和程序順序執(zhí)行的直觀流程是相悖的。

想象你定了一個外賣,一種是你定時去查看外賣有沒有到,一種是你出示電話號碼給外賣員,到達(dá)的時候電話通知你。

很容易可以看出第二種是更加高效的方案,其實這種通知機(jī)制應(yīng)用到編程領(lǐng)域,就是回調(diào)函數(shù)了。

熟悉win32開發(fā)的同學(xué)應(yīng)該知道,典型的windows程序框架就是一個消息循環(huán)外加一個窗口過程函數(shù)。其中windows系統(tǒng)接管消息接受,之后調(diào)用開發(fā)者的窗口過程函數(shù)來完成具體的消息處理邏輯。窗口過程函數(shù)就是一個回調(diào)函數(shù)。

為什么需要回調(diào)函數(shù)

以上面的 win32程序為例。我們知道出于安全性考慮,windows操作系統(tǒng)是不允許開發(fā)者直接訪問硬件資源的。微軟的開發(fā)者提供了api來處理消息循環(huán),但是具體消息的響應(yīng)邏輯需要開發(fā)者來提供,這種情形下,回調(diào)函數(shù)就是很好的實現(xiàn)方案。

再舉一個例子,想象你參與一個手機(jī)設(shè)備管理軟件項目的開發(fā)工作,你負(fù)責(zé)底層設(shè)備通信模塊。當(dāng)用戶插入設(shè)備到電腦中時,你需要通知上層的模塊進(jìn)行處理。出于靈活性和通用性的考慮,你不可能將設(shè)備連接時的處理邏輯放在你負(fù)責(zé)的模塊中,此時可以由上層調(diào)用者提供一個回調(diào)函數(shù),在設(shè)備連接時你的模塊調(diào)用回調(diào)函數(shù)即可。

關(guān)于回調(diào)函數(shù),有一個所謂的好萊塢準(zhǔn)則:Don"t call me; I"ll call you!

匿名函數(shù)

在c,c++等語言中,當(dāng)需要使用回調(diào)函數(shù)時,需要預(yù)先定義一個函數(shù)體。而回調(diào)函數(shù)通常只是提供給其它模塊進(jìn)行調(diào)用,為了簡化編碼,后續(xù)的javascript等腳本語言中提供了對匿名函數(shù)的支持。(注: 新的c++標(biāo)準(zhǔn)也開始支持匿名函數(shù),稱為Lambda函數(shù))

getUserInfo:function(cb){
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //調(diào)用登錄接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },

上面的代碼來自于上一篇教程中的app.js,在調(diào)用wx.login時,傳遞了一個匿名函數(shù)進(jìn)行調(diào)用成功后的邏輯處理,就是success后面的部分??梢钥吹竭@里只有函數(shù)定義而沒有函數(shù)名稱,因此除了作為回調(diào)函數(shù)外,也無法在其它地方調(diào)用該函數(shù)。

實際上匿名函數(shù)僅僅是一種編碼簡化而已,不過它帶來的好處卻不僅僅是減少編碼而已。

閉包

在編程技術(shù)中,閉包應(yīng)該屬于較高級的技術(shù)了。
當(dāng)使用回調(diào)函數(shù)時,通常會涉及到一些上下文的傳遞。在c/c++等語言中,會使用全局變量或堆內(nèi)存來傳遞上下文。全局變量的缺點很明顯,而堆內(nèi)存又很容易發(fā)生內(nèi)存泄漏。而在更高級的腳本語言中,可以通過閉包技術(shù)來輕松的完成上下文傳遞。

以上面的代碼為例,在回調(diào)函數(shù)中執(zhí)行了that.globalData.userInfo = res.userInfo來保存用戶信息,其中that變量由var that = this賦值,因此該變量指向app對象本身,所以才能成功保存用戶信息。

我們可以看到that對象是getUserInfo方法棧上的變量,如果沒有閉包技術(shù),此處的匿名回調(diào)函數(shù)是不能直接使用that變量的,就需要將app對象傳遞給回調(diào)函數(shù)(全局變量或函數(shù)參數(shù)的方式),而在閉包技術(shù)的支持下,回調(diào)函數(shù)可以像使用函數(shù)內(nèi)部變量一樣來訪問that變量,語法上便捷了許多。

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

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

相關(guān)文章

  • 微信小程開發(fā)教程(基礎(chǔ))3-app.js 解析

    摘要:微信小程序框架提供了一系列來幫助我們進(jìn)行本地數(shù)據(jù)存儲,上面的代碼中使用到了和兩個更多相關(guān)可以參考這里方法很容易理解,會執(zhí)行獲取用戶信息的功能。 上一篇教程中寫道,開發(fā)工具會生成一個默認(rèn)的程序框架,其中程序的主流程代碼包含在app.js中。默認(rèn)實現(xiàn)中,該部分功能比較簡單,不過對于學(xué)研究小程序開發(fā)還是比較有價值的。 由于代碼行數(shù)不多,下面一次性貼出來后進(jìn)行講解 //app.js App({...

    lemon 評論0 收藏0
  • 微信小程開發(fā)教程(基礎(chǔ))5-index 頁面解析

    摘要:上一篇教程談了些和微信小程序開發(fā)本身無關(guān)的技術(shù)問題,現(xiàn)在回到主題。這邊教程主要對默認(rèn)生成的頁面進(jìn)行講解。而的顯示則是由屬性直接指定。在該例子中,當(dāng)用戶點擊用戶頭像和昵稱的視圖區(qū)域時,程序便會顯示頁面。 上一篇教程談了些和微信小程序開發(fā)本身無關(guān)的技術(shù)問題,現(xiàn)在回到主題。 這邊教程主要對默認(rèn)生成的index 頁面進(jìn)行講解。在之前的教程中有寫道,每一個頁面都包含.js(處理邏輯),.wxml...

    GT 評論0 收藏0
  • 微信小程開發(fā)教程(基礎(chǔ))2-微信小程結(jié)構(gòu)概覽

    摘要:在新建一個項目后,微信小程序會生成一個默認(rèn)的程序框架,后續(xù)程序的開發(fā)工作都在這個框架上進(jìn)行。微信小程序的開發(fā)模式確實和開發(fā)很相似。通常一個完整的微信小程序包含上面兩部分,當(dāng)然我們也可以定義自己的目錄用于存放公共代碼和程序需要的其它文件。 在上一篇教程的最后,我們生成了一個類似Hello World的小程序,這個過程中沒有編寫任何一行代碼。在新建一個項目后,微信小程序會生成一個默認(rèn)的程序...

    muddyway 評論0 收藏0
  • 微信小程開發(fā)教程(基礎(chǔ))7-數(shù)據(jù)綁定上

    摘要:在之前的教程中寫到,微信小程序框架將程序分為邏輯層文件和視圖層文件。關(guān)于數(shù)據(jù)綁定的更多講述,敬請期待微信小程序開發(fā)教程基礎(chǔ)篇數(shù)據(jù)綁定下 在之前的教程中寫到,微信小程序框架將程序分為邏輯層(.js文件)和視圖層(.wxml文件)。這是一種常見的UI和邏輯分離的程序設(shè)計方式,開發(fā)出來的程序更加靈活,易擴(kuò)展。 這種程序設(shè)計方式通常要解決兩個問題: UI層響應(yīng)邏輯層邏輯和數(shù)據(jù)的變化UI層將用戶...

    I_Am 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<