千家信息网

Js子函数怎么访问外部变量

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,今天小编给大家分享一下Js子函数怎么访问外部变量的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了
千家信息网最后更新 2025年01月17日Js子函数怎么访问外部变量

今天小编给大家分享一下Js子函数怎么访问外部变量的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Js 子函数如何访问外部变量?分享三种解决方案。我们在写 web 页面时,肯定会经常遇到下面这种情况:

 

代码很简单,就是在页面上创建几个按钮,同时定义按钮的点击事件

可当点击按钮时,我们发现获取到的序号一直都是5,也就是 i 最后的值。

这是因为定义click事件时的匿名函数所引用的都是同一个变量 i

解决办法1:立即执行

var wrapper = $('.btns-wrapper');for(var i = 0; i < 5; i++){var btn = $('').appendTo(wrapper); //默认方法//btn.on('click', function(evt){// console.log('点击按钮:' + i);//}); //方法1:立即执行btn.on('click', (function(n){return function(evt){console.log('点击按钮:' + n);}})(i)); }

这种方式就是在定义事件时直接为每个按钮都创建了一个独立的匿名函数(闭包),并且每个函数都持有正确的 i 变量

解决办法2:利用jquery的事件传参

var wrapper = $('.btns-wrapper');for(var i = 0; i < 5; i++){var btn = $('').appendTo(wrapper); //默认方法//btn.on('click', function(evt){// console.log('点击按钮:' + i);//}); //方法2:利用JQuery的事件传参btn.on('click', { i: i }, function(evt){console.log('点击按钮:' + evt.data.i);}); }

这种办法就简单多了,直接利用jquery将参数体传递给匿名函数即可。

解决办法3:利用dom的data属性

var wrapper = $('.btns-wrapper');for(var i = 0; i < 5; i++){var btn = $('').appendTo(wrapper); //默认方法//btn.on('click', function(evt){// console.log('点击按钮:' + i);//}); //方法3:利用dom的data属性btn.data('i', i);btn.on('click', function(evt){console.log('点击按钮:' + $(this).data('i'));}); }

这种方法也很简单,弊端就是无法利用data属性定义结构化的数据。

以上就是"Js子函数怎么访问外部变量"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0