JS函数访问外部变量的方法有哪些?
Admin 2021-09-06 群英技术资讯 1995 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家介绍了关于vue watch监控对象的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
目录前言FabricObject 基类的实现抽离共同属性抽离共同方法Rect 类的实现本章小结前言在上个章节中我们已经创建了画布,接下来就可以进行物体的绘制了,那具体要怎么画呢?根据文章标题可以猜到应该是要抽象出一个物体基类,归纳出一些它们的共性,那它们能有啥共性呢,毕竟每个物体好像都是各画各的。对于这个问题大家可以先
这篇文章主要为大家详细介绍了JavaScript实现点击图片翻转效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我们在一些社区论坛常常会看到留言板,那么留言板功能是如何实现呢?首先我们们要了解基本需求,在留言板模块,用户能够发布评论,而且评论会按照时间排序,最新的评论会将旧的评论抵下去。此外,删除的权限只有博主有,用户不可删除评论。了解完基本需求,接下来介绍一下实现建议留言板效果的具体代码:
逻辑操作符与,由两个‘&’字符组成(&&),只有当两个操作数都是true时,它才会是true。逻辑操作符或,由两个垂直线字符构成(||)。逻辑操作符非,由(!)单独构成。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008