代码如下。
<body>
<a href="javascript:;" id="test">hello</a>
</body>
<script type="text/javascript">
document.getElementById("test").addEventListener("click", function () {
test()
}, false)
function test() {
var postTypes = new Array('hello', 'there')
(function() { alert('hello there') })()
}
</script>
这将抛出一个:
"未发现的类型错误:对象不是一个函数"。
如果我把匿名函数的调用/调用包在另一组小括号里,它就会执行警报,但仍然给我一个错误。 如果我在"var postTypes"定义后面加一个分号,那么它就会完全正常。
我被告知javascript不需要分号,所以我猜测有一些奇怪的函数应用的关联性规则,我没有完全理解。 我为什么会得到这个错误?
Javascript确实需要分号,只是在没有分号的情况下,代码会出现语法错误时,解释会在断行处为你插入分号*。
不幸的是,这些代码
var a = new B(args)(stuff)()
不是*语法错误,所以不会有;
被插入。(一个可以运行的例子是
var answer = new Function("x", "return x")(function(){return 42;})();
为了避免这样的意外,请训练自己总是用;
来结束语句。
(*:只是一个拇指规则。并非总是如此。插入规则要复杂得多。这个博客页面关于分号插入有更多细节。)