微信小程序中常見的typeof cb == “function” && cb(that.globalData.userInfo)


信小程序官方demo以及很多代碼中會在函數中經常出現typeof cb == “function” && cb(that.globalData.userInfo)一句。開始很不明白,網上的回答大多也是一知半解,查了官方的api配合demo的代碼,終於搞清楚了。
代碼本身的含義是,判斷cb是不是函數類型同時將一個參數傳入名為cb的函數下,這樣看似乎還是不明白,那就加上源碼來看。

1.以下是官方demo中獲取用戶信息的函數定義
getUserInfo:function(cb){
console.log(‘getUserInfo 函數開始執行’);
var that = this
if(this.globalData.userInfo){
typeof cb == “function” && cb(this.globalData.userInfo)
}else{
//調用登錄接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
console.log(‘用戶數據獲取成功’);
that.globalData.userInfo = res.userInfo
typeof cb == “function” && cb(that.globalData.userInfo)
}
})
}
})
}
}

2.以下是在index.js中的onLoad函數的代碼
onLoad: function () {
console.log(‘onLoad函數開始執行’)
var that = this
//調用應用實例的方法獲取全局數據
app.getUserInfo(function(userInfo){
//更新數據
that.setData({
userInfo:userInfo
})
console.log(‘用戶數據存入當前頁面’);
})
}

解釋:在getUserInfo的方法定義中,接收了名為cb的參數,使用時機就是在拿到用戶信息的時候,如果這個cb類型為函數就執行名為cb這個函數。再看函數調用,在index.js的onLoad方法中調用了這個函數並定義了一函數作為參數,函數的內容就是將傳入的userInfo設置在當前頁面的數據中。

執行步驟:當進入到index頁面時首先會調用onLoad函數,然后會執行app.getUserInfo()函數(輸出可以先乎略),在getUserInfo()函數中會先判斷是本地是否保存有用戶信息,第一次執行的時候肯定沒有走else,執行登錄方法,拿到用戶信息然后執行typeof cb == “function” && cb(that.globalData.userInfo) 執行作為參數的函數的方法,按輸出信息走就是這樣一個過程,先輸出’onLoad方法開始執行’,然后是’getUserInfo 函數開始執行’,再然后是’用戶數據獲取成功’最后會輸出’用戶數據存入當前頁面’。

標簽:==function


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM