我知道这是不好的做法。如果可能的话,不要写这样的代码。
当然,我们总是会发现自己处于一个巧妙的内联 Javascript 片段可以快速解决问题的情况。
我追求这个查询是为了充分理解写这样的东西时会发生什么(以及潜在的陷阱):
<a href="#" onclick="alert('Hi')">Click Me</a>
据我所知,这在功能上与
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
由此推断,似乎分配给属性的字符串onclick
被插入到一个匿名函数中,该函数被分配给元素的点击处理程序。真的是这样吗?
因为我开始做这样的事情:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
哪个有效。但我不知道这是多少黑客行为。它看起来很可疑,因为没有返回明显的函数!
你可能会问,你为什么要这样做,史蒂夫?内联 JS 是不好的做法!
老实说,我已经厌倦了仅仅为了修改页面的一个部分而编辑三个不同的代码部分,尤其是当我只是制作原型以查看它是否可以工作时。在元素中定义与此 HTML 元素特别相关的代码要容易得多,有时甚至是有意义的:当我在 2 分钟后决定这是一个可怕的、可怕的想法时,我可以核对整个 div(或其他) 并且我没有在页面的其余部分挂起一堆神秘的 JS 和 CSS 杂物,从而稍微减慢了渲染速度。这类似于引用局部性的概念,但我们关注的是错误和代码膨胀,而不是缓存未命中。