微信小程序button官方示例代码中按钮响应函数问题

图片描述

先贴代码再说明问题
//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循环代码,作用是点击3个按钮,大小在default和mini之间切换,但是有几个问题没搞懂:

①3个按钮绑定了点击事件,但是写响应函数写在for循环里面了,不是传统的写法,不知道怎么理解。

②for循环的写法看不懂

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

​这算什么写法?最后一个小括号里面写了个types[i]是什么意思??????

阅读 5.3k
1 个回答
for (var i = 0; i < types.length; ++i) {
  (function (type) {
    
  )(types[i]);
  console.log('types[i]=' + types[i])
}

这样看是不是爽多了?
这样不就等于形成了一个闭包。把i这个值存了下来?
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题