闭包实现10个‘a’标签循环点击

来源:6-6 作用域相关的面试题 - part2

linlins

2021-11-05

老师你好,我想问一下

//利用闭包,()()立即执行/函数内部访问外部变量
let a
for(let i=0;i<10;i++){
a=document.createElement(‘a’)
a.innerHTML=i+'<br>';
(function (e){
a.addEventListener(‘click’,function(){
console.log(e)
})
})(i);//立即执行匿名函数,传递下标i(实参)
document.body.appendChild(a)
}
//或者
let a
for(let i=0;i<10;i++){
a=document.createElement(‘a’)
a.innerHTML=i+'<br>';
a.addEventListener(‘click’,(function (e){
return function () {
console.log(e)
}
})(i));
document.body.appendChild(a)
}
这俩种闭包都可以点击显示对应的i数值,这俩种闭包的有什么区别吗,第二种是属于把函数作为返回值的闭包类型,第一种好像既不属于函数作为参数也不属于作为返回值

写回答

1回答

双越

2021-11-06

一样的,这两种都是把 i 作为参数传递到一个函数的作用域中保存

0
2
双越
回复
linlins
是的。
2021-11-06
共2条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程