0

次のコードが機能する理由を誰か説明してもらえますか?

function getLastName()
{
    fullName.lastName = "World";   
}

function writeName()
{
    fullName = {};
    fullName.firstName = "Hello";
    getLastName();
    document.write(fullName.firstName + " " + fullName.lastName);
}

writeName();

何らかの理由で、getLastName()その外側のメソッドのローカル状態にローカルに到達できます。これはどのように機能しますか?また、Javascript のこの機能を利用する必要がありますか?それとも悪い習慣と見なされますか? それが悪い習慣である場合、その理由を説明していただけますか?

実際のコードはhttp://jsbin.com/atituk/2/editで確認できます。

4

3 に答える 3

8

varキーワードを使用する必要があるローカル変数はありません。すべての変数はグローバルであり、 内のどこからでもアクセスできますがwindow、これは良い習慣とはまったく見なされません。

于 2013-03-29T18:14:02.893 に答える
2

関数内でvarキーワードagainstを使用していないため、スコープ outside から取得しています。最も外側のスコープに到達するまでチェーンを上っていき、その時点でグローバルを作成します。fullNamewriteNamewriteName

一般に、グローバルは追跡するのが難しく、誤って上書きされる可能性が高いため (競合状態などで)、悪い習慣です。

厳密モードを使用していた場合、グローバルではなくエラーが発生します。

于 2013-03-29T18:14:22.683 に答える
1

自分のすべての変数をグローバル変数として使用しています。したがって、すべてがどこでも認識されます。Javascript の変数スコープをよりよく理解するには、この素晴らしい例をご覧ください https://stackoverflow.com/a/500459/655316

于 2013-03-29T18:21:31.527 に答える