2

以下の関数doStuffの場合、内部関数と同じ名前であっても、sayHello(関数dostuffの外部)を呼び出すことはできますか?

var sayHello = function(){
    alert("Called from outside the function");
}
function doStuff(){
    sayHello();
    function sayHello(){
        alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?");
    }
}
    doStuff();
​

上記のJavascriptコードでは、関数sayHello(2つの関数の名前)は、関数の外部ではなく、関数の内部から呼び出されます。

これはjsFiddleにあります:http://jsfiddle.net/5MSTU/

4

2 に答える 2

3

外部関数がグローバルの場合、オブジェクトのメンバーとしてターゲットにすることができwindowます。

window.sayHello();

それ以外の場合は、別の名前を使用する必要があります。JavaScriptでは変数をシャドウイングできるため、外部変数と同じ名前の内部変数は、外部変数へのアクセスを事実上無効にします。

于 2012-09-30T22:15:34.170 に答える
-1

-ここにあった明白な間違ったコードを削除するために更新されました--

事前にエイリアスを作成できます。しかし、これがどれほど役立つかはわかりません。

var sayHello = function(){
    alert("Called from outside the function");
};

var aliasForSayHello = sayHello;

function doStuff() {
    function sayHello(){
        alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?");
       aliasForSayHello();
    }       

    sayHello();

}

doStuff();

​
于 2012-09-30T22:25:39.090 に答える