当for循环里有名为onclick函数时,window会被加上点击事件, 为什么 ???

<script type="text/javascript">

for (var i = 0; i < 3; i++) {

function onclick(e) {

document.write(222)

}

}

</script>

点这里测试

如上代码,会被加上点击事件,莫名奇妙

而且将onclick不放在for循环里时,并没有这个现象

回答

window.onclick 就是相当于注册点击事件

然后看下这个例子:

window.abc = null

function abc() {

console.log(1)

}

console.log(window.abc) // null

再看下这个例子,括号里是不是就是你发的代码:

window.abc = null

{

function abc() {

console.log(1)

}

}

console.log(window.abc) // abc

你可以理解 浏览器在最开始把window.onckick赋值为null,如果在声明函数的时候不是在大括号内,函数就会声明提示导致声明在window.onclick = null前面就无法重新赋值

这个应该跟浏览器解析块级函数声明有关。理论上来说函数不应在块级作用域中声明
https://developer.mozilla.org...

从ECMAScript 6开始,在严格模式下,块里的函数作用域为这个块。ECMAScript 6之前不建议块级函数在严格模式下使用。

你现在就是在for语句中声明了函数,在chrome、firefox中应该是等效为window.onclick = ....
如果你在IE中查看就不会有这样的效果。
chrome控制台提供了一个API来查看事件绑定。看下图:
当onclick在全局中声明时,就是一个正常的全局函数,并不会绑定window.onclick
736.png

而如果是在for语句中声明则会绑定事件:
苏宁豆芽图片20200601194817.png

所以,千万不要在块级语句中声明函数,这个行为很奇怪

以上是 当for循环里有名为onclick函数时,window会被加上点击事件, 为什么 ??? 的全部内容, 来源链接: utcz.com/a/19752.html

回到顶部