3

最近、このコードスニペットを見つけました。

function start() {

    function sleep(milliSeconds) {
        var startTime = new Date().getTime();
        while (new Date().getTime() < startTime + milliSeconds);
    }

    sleep(10000);
    return "Hello Start";
}

「従来の」アプローチを使用する代わりに、この方法で関数を定義することにはどのような利点がありますか?

前もって感謝します。

4

2 に答える 2

4

これを行う利点は、関数sleepがグローバル スコープで定義されなくなることです。スコープは functionstartです。

すべての関数をグローバル スコープに配置すると、他のスクリプトと競合する可能性があるため、これは有利です。

すべての関数をグローバルとして定義することについては何もありませんtraditional。それは永続化されている単なる悪い習慣です。フットプリントを減らすことglobalは、スクリプトと、アプリケーションに含まれる可能性のある他のスクリプトとの間の競合を減らす、適切で責任ある方法です。

于 2013-02-13T16:28:10.323 に答える
1

それはスコープと関係があります。JavaScriptの優れた概要については、最近公開された JavaScript Ninja の秘密のコピーを入手することを検討してください。ただし、ブラウザー コンソールを使用してこれを試すことができます (Internet Explorer では機能しない可能性があります。Chrome を使用してください)。

> function start() { function bob() { console.log('bob'); } bob() };
> start()
> bob
> bob()
> ReferenceError: bob is not defined

bobしたがって、関数内の関数は関数start外のスコープにないことがわかりstartます。これにはいくつかの理由があります。

于 2013-02-13T16:32:08.123 に答える