JS函数访问外部变量的方法有哪些?
Admin 2021-09-06 群英技术资讯 2967 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在实际的应用中用搜索框查询时,经常会需要进行模糊查询操作,因此这篇文章就主要给大家分享怎样用Node实现有模糊查询功能的搜索框,下文有实现步骤和代码,感兴趣的朋友就接着往下看吧。
这篇文章主要为大家介绍了JS前端架构pnpm构建Monorepo方式的管理demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
在jquery中,可以利用one()函数让方法只触发一次,当使用该函数时,每个元素只能运行一次事件处理方法,语法为“元素对象.one("事件",事件处理方法);”。
倒计时提示框在网页设计中是比较常见的,可应用作自动弹窗,自动关闭,那么究竟要如何实现倒计时提示框呢?下面是基于javascript实现倒计时提示框的介绍,实现效果如下:
这篇文章我们来了解jQuery去除input值空格的方法,这里使用到两个方法,val()方法和trim()方法,下文有具体的实现代码,对大家学习这两种方法的使用及去除input值空格都有帮助,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008