3

コードを見る

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

私はaのオブジェクトを作成しておらず、hello()を呼び出していません。しかし、hello()が呼び出されています。

クロージャーを削除しても、関数は自動的に呼び出されません。すなわち。にとって

<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

その理由は、;.

関数式と次の行の間にセミコロンがないため(、次のように、2 番目の関数が最初の関数のパラメーターになります。

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