微信小程序中常見的 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 函數開始執行’,再然後是’用戶數據獲取成功’最後會輸出’用戶數據存入當前頁面’。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章