先说明关键:绑定事件、函数和函数执行。闭包只是环境
遇到的问题:
在写闭包时发现按照以往写绑定事件时会得到不一样的结果:second函数只输出 ‘aaaaa’。
而分开写就没有问题:first()。
明白为什么要了解:
写在前面:绑定事件以onclick举例
1、绑定事件时会把要绑定的函数走一遍,onlick接收的是一个值,一般是个函数。接收之后存起来,事件触发时执行。
2、函数和函数返回值(即执行了该函数)。在first()中,onclick绑定的是first()的返回值,即匿名函数。在second()中绑定的是second()本身。
<button id="btn"></button>
<script>
const btn = document.getElementById("btn");
// function first() {
// let n=0;
// console.log('绑定时走了一遍');
// return function () {
// console.log(n++);
// }
// }
// btn.onclick = first() //绑定事件时调用first(),执行first(),onclick绑定的是first里return的function
btn.onclick = function second() { //直接把second()绑给onclick
let n = 0;
console.log('aaaaa');
return function () {
console.log(n++);
console.log('这个代码块不会执行,因为直接return了');
}
}
</script>
总结:对前面的知识没有理解透彻,这个并不难,但要注意细节。
2228

被折叠的 条评论
为什么被折叠?



