首页 > web前端 > js教程 > 将参数传递给循环内的函数时如何保留变量值?

将参数传递给循环内的函数时如何保留变量值?

Linda Hamilton
发布: 2024-10-24 22:00:30
原创
361 人浏览过

How to Preserve Variable Values When Passing Arguments to Functions Inside Loops?

向函数传递参数时保留变量值

使用 JavaScript 循环时,您可能会遇到需要保留以下值的情况将变量传递给函数时。当变量的值在循环执行期间可能发生变化时,就会出现这种情况,从而导致事件侦听器出现意外行为。

请考虑以下示例:

<code class="js">for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() {
        change_selection(i);
    });
}
登录后复制

在此代码中,事件侦听器是附加到循环内的每个标记。但是,当触发侦听器时,它使用 i 的最终值,即循环结束时结果数组的长度。这种行为是不可取的,因为它会导致所有事件侦听器使用相同的值。

要为每个侦听器保留 i 的值,您可以使用块范围变量(在现代浏览器中)或闭包(在

现代浏览器 (ES6):

<code class="js">for (let i = 0; i < results.length; i++) {
    let marker = results[i];
    google.maps.event.addListener(marker, 'click', () => change_selection(i));
}</code>
登录后复制

使用 let 关键字创建一个只能在循环内访问的块范围变量。这确保每个事件监听器在创建时都有自己的 i 值副本。

旧版浏览器:

<code class="js">for (var i = 0; i < results.length; i++) {
    (function (i) {
        marker = results[i];
        google.maps.event.addListener(marker, 'click', function() {
            change_selection(i);
        });
    })(i);
}</code>
登录后复制

创建匿名函数并调用它以 i 作为第一个参数创建一个闭包。该函数保留创建时 i 的值,确保每个事件侦听器为其特定标记使用正确的值。

以上是将参数传递给循环内的函数时如何保留变量值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板