为什么在第二个代码中加入 my_function() 后,按钮点击可以计数,而第一个代码却无法计数?

为什么在第二个代码中加入 my_function() 后,按钮点击可以计数,而第一个代码却无法计数?

为何在第二个代码中加入 my_function() 后,按钮点击即可计数

在第一个代码中,当点击按钮时,将执行 my_function() 函数。该函数获取页面上所有按钮的列表,并为每个按钮添加 onclick 事件侦听器。此侦听器创建一个内部函数 myfn,该函数使用闭包捕获当前索引 i。

然而,在第二个代码中,除了添加事件侦听器外,我们还立即调用了 my_function() 函数。这导致 myfn 内部函数被立即执行。这样,每个按钮都拥有了自己的闭包,其中 c 被初始化为 0。因此,当点击按钮时,它将执行内部函数并递增 c。

为什么 button 点击事件仍然触发 my_function()

尽管事件侦听器设置为 onclick='my_function()', 但它仍然会触发 my_function() 函数。这是因为 JavaScript 事件传播是一个“气泡”过程,这意味着当单击按钮时,事件会从目标元素(按钮)冒泡(传播)到父元素(body)。

当事件到达 body 元素时,会触发事件侦听器,执行 my_function() 函数。尽管内部函数 myfn 被立即执行,但父函数 my_function() 仍然会执行其剩余的代码,即获取所有按钮的列表。

alert(my_function()) 弹出 undefined 的原因

当调用 my_function() 函数 دون 返回值时,打印 alert(my_function()) 将返回 undefined。这是因为 undefined JavaScript 中未返回任何值时使用的默认值。

以上就是为什么在第二个代码中加入 my_function() 后,按钮点击可以计数,而第一个代码却无法计数?的详细内容,更多请关注其它相关文章!