参见代码
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
}
(function()
{
var b = 8;
}
());
</script>
我不是在创建一个对象而不是调用hello()。但是我正在调用hello()。
当我删除闭包时,不会自动调用该函数。 即。对
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
}
</script>
这种奇怪行为的原因是什么?
答案 0 :(得分:4)
通过省略分号,您不小心调用了hello()函数。这就是使用分号的原因,即使JS引擎的自动分号插入功能使它们看起来就像它们没有必要一样!试试这个:
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
};
(function()
{
var b = 8;
}
());
</script>
答案 1 :(得分:3)
原因是您错过了;
。
因为函数表达式和下一行的(
之间没有分号,所以第二个函数成为第一个函数的参数,如下所示:
a.prototype.hello = function()
{
alert('hello');
}(function() { ... }());