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

当然,如果你在严格模式下,你也需要小心隐含的全局变量。
这就是我能想到的你的代码出了问题,更多的细节可能会为我们提供一个关于实际发生的事情的线索......

于 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 回答