注意:最初,我认为问题是由更复杂的事情引起的;我现在看到(并编辑了标题和示例代码)唯一的区别是分号的存在与否。这可能使得这个问题很容易回答,但我仍然感到惊讶的是,在这种情况下,后面的分号很重要而不是其他分号......
为什么这样做:
<script type="text/javascript">
this.someFunc = function () {};
(function () {
console.log("self-invoking function called.")
})();
</script>
但这不是:
<script type="text/javascript">
this.someFunc = function () {}
(function () {
console.log("self-invoking function called.")
})();
</script>
然而,这样做:
<script type="text/javascript">
this.someFunc = function () {}
var someVar = "value";
console.log("someVar is:"+someVar);
</script>
后者将自调用函数解释为undefined
,因此无法评估/执行它。在OSX上的Chrome 13,Firefox 6和Safari 5上进行了测试。
答案 0 :(得分:2)
我相信第二个片段实际上是在执行空函数声明。如果您将示例更改为:
<script type="text/javascript">
this.someFunc = function (arg) { console.log(arg); }
(function () {
console.log("self-invoking function called.")
})();
</script>
然后运行(FF6),您将看到它记录:function()
。它传递第二个匿名函数作为第一个参数。如果重新排列,这会更有意义:
<script type="text/javascript">
this.someFunc = function (arg) { console.log(arg); }(
function () {
console.log("self-invoking function called.")
})
(); //the parser doesn't know what to do with this line.
</script>
答案 1 :(得分:0)
只需查看问题右侧的第一个相关主题:Why should I use a semicolon after every function in javascript?
接受的答案是对这种行为的一个很好的解释。