美文网首页程序员
js闭包解决事件传参错误的问题

js闭包解决事件传参错误的问题

作者: 刘振宁的博客 | 来源:发表于2019-02-27 12:05 被阅读11次

问题

js,在事件中使用外部的参数,因为定义事件的时候,事件不执行,当执行事件的时候,参数却已经改变。如下

for (var i=0;i<statementList.length;i++) {
    var statement = statementList[i];
    var statementId = statement.id;
        $item.find('.historytest_right').click(function () {
            console.info(statementId);
        });
    $('body').append($item);
}

这段代码,是循环了一个数组,为每一项添加一个单击事件,单击之后,输出statementId,但是都是输出8,也就是最后一个statement的id,当单击的时候,statement的值已经固定了,成为最后一个了.


image.png

解决方法

用js的闭包特性,可以记录当时定义函数时的值,如下:

for (var i=0;i<statementList.length;i++) {
    var statement = statementList[i];
    var statementId = statement.id;
    //定义函数,立即执行,并将参数传递过去,进行记录(一直保持在内存中)
    (function (myStatementId) {
        $item.find('.historytest_right').click(function () {
            console.info(myStatementId);
        });
    })(statementId);
    $('body').append($item);
}

这种写法是可以的。

也可以写成内部临时变量

(function (myStatementId) {
    $item.find('.historytest_right').click(function () {
        console.info(myStatementId);
    });
})(statementId);

//===>内部临时变量

(function () {
    var myStatementId = statementId;
    $item.find('.historytest_right').click(function () {
        console.info(myStatementId);
    });
})(statementId);

相关文章

  • js闭包解决事件传参错误的问题

    问题 js,在事件中使用外部的参数,因为定义事件的时候,事件不执行,当执行事件的时候,参数却已经改变。如下 这段代...

  • Js 闭包传参 setInterval 多次

    A friend 问了我一个问题,大概是在一个for循环中启动多个定时器。代码大概如下, 结果是每两秒钟打印五次,...

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • JavaScript之闭包

    闭包 闭包:可以用一个函数 去访问 另外一个函数的内部变量的方式 闭包传参

  • VUE 事件路由传参重点

    点击事件传参 A 页面 点击事件 DIV部分 {{pdzs}} {{bdzs}} JS部分: methods:...

  • JS闭包入门

    最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。 到底什么是JS闭包? 定...

  • 再谈JS闭包(JS闭包系列2)

    这篇文章,来继续谈谈Javascript闭包的剩余问题。因为在上一篇文章中关于JS闭包(JS闭包系列1)主要简单的...

  • 小程序传参

    小程序传参的几种方法。 1. navigator 跳转传参 (参数多时可用''&'') 或者添加点击事件 js...

  • Dart 学习之路

    形参中如何实现必传参数 与 非必传参数 2.闭包 结果是:

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

网友评论

    本文标题:js闭包解决事件传参错误的问题

    本文链接:https://www.haomeiwen.com/subject/bmmxuqtx.html