9

以下のフック関数でグローバル変数「x」を使用したい。

var x = 10; //global variable

var oldA = a;    

a = function a(param){

    alert(x);        //showing error: x is undefined 

    return oldA(param);

}

エラーを解決するには?

4

2 に答える 2

11

あなたのコードは私にとっては問題なく動作しますが、xを使用して明示的にグローバル変数に解決することをお勧めしますwindow.x
ブラウザー環境でない場合、またはグローバル オブジェクトが呼び出されない環境の場合は、次のことwindowを試してください。

(window || root || global || GLOBAL || this || self || {x: undefined).x

{x:undefined}オブジェクト リテラルは、式がエラーをスローしないようにするためのものです。
(厳密に言えば名前のない) グローバル オブジェクトに付けられている、私が知っているほとんどすべての名前をリストしました。

一方、関数 ( ) が呼び出されるまでにグローバル変数x a再割り当てされる可能性がある場合は、クロージャーが望ましいでしょう。

a = (function (globalX)
{
    return function a(param)
    {
        console.log(globalX);
        return oldA(param);
    };
}(x || window.x));//pass reference to x, or window.x if x is undefined to the scope

もちろん、strict モードの場合は、暗黙のグローバルにも注意する必要があります。
コードに問題があると私が考えることができるのはそれだけです。さらに詳細を確認すると、実際に何が起こっているのかの手がかりが得られる可能性があります...

于 2013-06-28T11:23:19.263 に答える
0

関数内のグローバル Js 変数にアクセスするには、関数スコープで Var を使用せず、グローバル スコープで var に言及します。例えば。

<script>
    var foo = "hello";
    function fxn() {
        alert(foo);
        foo = "bai";
    }
    fxn();

    alert(foo+"out side");
</script>
于 2015-11-03T05:48:11.830 に答える