JS函数访问外部变量的方法有哪些?
Admin 2021-09-06 群英技术资讯 2066 次浏览
JS函数访问外部变量的方法有哪些?其实任何在函数中定义的变量都可认为是私有变量,因为是不能在函数外部访问这些变量的,但是我们可以通用JavaScript中子函数访问外部变量,下文给大家分享了三种方法,感兴趣的朋友可以参考。
我们在写web页面时,肯定会经常遇到下面这种情况:
<body> <div class="btns-wrapper"></div> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> var wrapper = $('.btns-wrapper'); for(var i = 0; i < 5; i++){ var btn = $('<button>按钮' + i + '</button>').appendTo(wrapper); btn.on('click', function(evt){ console.log('点击按钮:' + i); }); } </script> </body>
代码很简单,就是在页面上创建几个按钮,同时定义按钮的点击事件
可当点击按钮时,我们发现获取到的序号一直都是5,也就是 i 最后的值。这是因为定义click事件时的匿名函数所引用的都是同一个变量 i
var wrapper = $('.btns-wrapper'); for(var i = 0; i < 5; i++){ var btn = $('<button>按钮' + i + '</button>').appendTo(wrapper); //默认方法 //btn.on('click', function(evt){ // console.log('点击按钮:' + i); //}); //方法1:立即执行 btn.on('click', (function(n){ return function(evt){ console.log('点击按钮:' + n); } })(i)); }
这种方式就是在定义事件时直接为每个按钮都创建了一个独立的匿名函数(闭包),并且每个函数都持有正确的 i 变量
var wrapper = $('.btns-wrapper'); for(var i = 0; i < 5; i++){ var btn = $('<button>按钮' + i + '</button>').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将参数体传递给匿名函数即可。
var wrapper = $('.btns-wrapper'); for(var i = 0; i < 5; i++){ var btn = $('<button>按钮' + i + '</button>').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属性定义结构化的数据。
综合来看,如果是jquery环境,利用事件参数来转递变量是最简单的,而且可以传递结构化的数据。否则只能通过立即执行(闭包)的方式。
关于js函数访问外部变量的方法就介绍到这,上述三种方法具有一定的借鉴价值,感兴趣的朋友可以参考学习,希望能对大家有帮助,想要了解更多大家可以关注群英网络其它相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录:访问视图Post请求Post请求-body(1)Post请求-body(2)Post登陆1Post登陆2页面访问控制1页面访问控制2访问视图前面我们已经添加了视图模板并学习了访问视图的方法,那我们就先回顾一下。1.参考以下代码,地址栏访问这几个请求路径查看是否可以成功。app.get('/',function(req,res){res.ren
这篇文章主要为大家详细介绍了Vues实现跑马灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JS有哪些高效的魔法运算符?对于JS运算符大家应该都比较熟悉,但JavaScript在不断更新,也会增加不少高效的运算法,这篇文章给大家分享一些高效的魔法运算符,感兴趣的朋友就继续往下看吧。
有时候在开发的过程中发现一个Angular项目不太够用,两个独立的项目又不太好复用,这时便需要将原来的Angular项目简单做个升级,这篇文章主要给大家介绍了关于将Angular单项目升级为多项目的相关资料,需要的朋友可以参考下
react打包后 路由apache访问404,react项目使用了路由,项目打包后,使用apache服务器访问,能够正常显示,但是刷新后页面404了刷新页面时访问的资源在服务端找不到,因为react-router设置的路径不是真实存
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008