3

查看代码

<script type = 'text/javascript'>
function a()
{
    ;
}
a.prototype.hello = function()
{
    alert('hello');
}
(function()
    {
        var b = 8;
    }
());
</script>​

我没有创建 a 的对象,也没有调用 hello()。但是我正在调用 hello()。

当我删除闭包时,不会自动调用该函数。IE。为了

<script type = 'text/javascript'>
function a()
{
    ;
}
a.prototype.hello = function()
{
    alert('hello');
}
</script>

这种奇怪行为的原因是什么?

http://jsfiddle.net/6yc9r/


http://jsfiddle.net/6yc9r/1/

4

2 回答 2

4

通过省略分号,您会意外调用 hello() 函数。这就是为什么要使用分号的原因,尽管 JS 引擎的自动分号插入功能使它们看起来没有必要!尝试这个:

<script type = 'text/javascript'>
function a()
{
    ;
}
a.prototype.hello = function()
{
    alert('hello');
};
(function()
    {
        var b = 8;
    }
());
</script>​
于 2012-04-26T20:28:43.997 回答
3

原因是您缺少一个;.

因为函数表达式和下一行的之间没有分号(,所以第二个函数成为第一个函数的参数,如下所示:

a.prototype.hello = function()
{
    alert('hello');
}(function() { ... }());
于 2012-04-26T20:28:41.637 回答