看一个简单的例子:
html:
<head> <meta charset="UTF-8"> <title>Document</title> <script src="test.js"></script> </head> <body> <a href="#" id="test" class="link test test" onclick="fn()">baidu.com</a> </body>
js:
window.onload = function() { function fn(){ console.log('fn'); } };
看起来,当我点击 a 标签的时候,应该有 log ‘fn’,然而实际上却是:
懵了一会儿,因为一般用 window.onload 不会出现这种问题,,,后来想了想明白了,因为 js高程-第三版-中 里是这么说的:
html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。
而上面的 fn 定义在 window.onload 的回调里,处于局部作用域,所以无法访问到,所以把 fn 放到全局作用域就行了,例如:
<head> <meta charset="UTF-8"> <title>Document</title> <script> function fn() { console.log('fn'); } </script> </head> <body> <a href="#" id="test" class="link test test" onclick="fn()">baidu.com</a> </body>
这样就 OK,或者把上面这个 script 放到 body 最后也是可以的,总结下就是:
html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。