You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何访问bind传递的额外参数?循环绑定问题解析

解决循环中绑定点击事件传递answerNumber的问题

你当前的问题出在Function.bind()的使用上:bind的第一个参数是用来指定函数执行时的this指向,不是要传递的参数。你直接传answerNumber,相当于把它当成了_continueOnClick的this,再加上循环里的answerNumber会因为作用域共享导致最终所有点击都拿到最后一次的值,所以函数里直接访问answerNumber会失败。

下面给你几种可行的解决方法:

方法1:用bind正确传递参数

先绑定函数的this(比如当前实例的this),再把answerNumber作为后续参数传递:

// 循环内的绑定代码
btn.find("a").data(this.key, option.slide).bind("click", this._continueOnClick.bind(this, answerNumber));

修改_continueOnClick接收参数(注意:bind传的参数会排在事件对象e前面):

_continueOnClick: function (answerNumber, e) {
    console.log(answerNumber); // 现在能拿到对应循环次的数值
}

方法2:用闭包保存循环变量

在循环内部用立即执行函数包裹,把当前循环的answerNumber存进闭包,避免作用域共享问题:

// 循环内部执行这段代码
(function(currentNum) {
    btn.find("a").data(this.key, option.slide).bind("click", function(e) {
        this._continueOnClick(currentNum, e);
    }.bind(this));
})(answerNumber);

对应的_continueOnClick写法和方法1一致,接收currentNum参数即可。

方法3:用jQuery的data存储值

把answerNumber存在绑定点击事件的元素上,点击时从元素的data里读取:

// 绑定的时候存入data
btn.find("a")
    .data(this.key, option.slide)
    .data('answerNum', answerNumber) // 新增存储answerNumber
    .bind("click", this._continueOnClick.bind(this));

然后在函数里通过事件目标元素获取:

_continueOnClick: function (e) {
    const answerNumber = $(e.currentTarget).data('answerNum');
    console.log(answerNumber);
}

内容的提问来源于stack exchange,提问作者mcool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:58:38