鍍金池/ 問答/HTML/ 微信小程序button官方示例代碼中按鈕響應函數(shù)問題

微信小程序button官方示例代碼中按鈕響應函數(shù)問題

圖片描述

先貼代碼再說明問題
//button.wxml

<button type="default" size="{{defaultSize}}" loading="{{loading}}" plain="{{plain}}" disabled="{{disabled}}" bindtap="default" hover-class="other-button-hover">
  default
</button>
<button type="primary" size="{{primarySize}}" loading="{{loading}}" plain="{{plain}}" disabled="{{disabled}}" bindtap="primary">
  primary
</button>
<button type="warn" size="{{warnSize}}" loading="{{loading}}" plain="{{plain}}" disabled="{{disabled}}" bindtap="warn">
  warn
</button>
<button bindtap="setDisabled">點擊設置以上按鈕disabled屬性</button>
<button bindtap="setPlain">點擊設置以上按鈕plain屬性</button>
<button bindtap="setLoading">點擊設置以上按鈕loading屬性</button>
<button open-type="contact">進入客服會話</button>

//button.js

var types = ['default', 'primary', 'warn']
var pageObject = {
  data: {
    defaultSize: 'default',
    primarySize: 'default',
    warnSize: 'default',
    disabled: false,
    plain: false,
    loading: false
  },
  setDisabled: function (e) {
    this.setData({
      disabled: !this.data.disabled
    })
  },
  setPlain: function (e) {
    this.setData({
      plain: !this.data.plain
    })
  },
  setLoading: function (e) {
    this.setData({
      loading: !this.data.loading
    })
  }
}
 
for (var i = 0; i < types.length; ++i) {
  (
    function (type) {
      pageObject[type] = function (e) {
        console.log('type=' + type, 'e=' + e)
        var key = type + 'Size'
        var changedData = {}
        changedData[key] = this.data[key] === 'default' ? 'mini' : 'default'
        console.log('changedData=' + changedData.text)
        this.setData(changedData)
      }
    }
  )(types[i])
  console.log('types[i]=' + types[i])
}
 
Page(pageObject)

問題是button.js中最后的for循環(huán)代碼,作用是點擊3個按鈕,大小在default和mini之間切換,但是有幾個問題沒搞懂:

①3個按鈕綁定了點擊事件,但是寫響應函數(shù)寫在for循環(huán)里面了,不是傳統(tǒng)的寫法,不知道怎么理解。

②for循環(huán)的寫法看不懂

for(...){
  (
      ...
  )(...)

?這算什么寫法?最后一個小括號里面寫了個types[i]是什么意思??????

回答
編輯回答
有點壞
for (var i = 0; i < types.length; ++i) {
  (function (type) {
    
  )(types[i]);
  console.log('types[i]=' + types[i])
}

這樣看是不是爽多了?
這樣不就等于形成了一個閉包。把i這個值存了下來?
2018年3月3日 16:02