我想在下面的钩子函数中使用全局变量 'x'。
var x = 10; //global variable
var oldA = a;
a = function a(param){
alert(x); //showing error: x is undefined
return oldA(param);
}
如何解决错误?
我想在下面的钩子函数中使用全局变量 'x'。
var x = 10; //global variable
var oldA = a;
a = function a(param){
alert(x); //showing error: x is undefined
return oldA(param);
}
如何解决错误?
您的代码对我来说运行良好,但是您可能希望通过使用 window.x
显式地将 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
当然,如果你处于严格模式,你也需要小心隐含的全局变量。
这就是我能想到的代码出了问题的原因,可能提供更多细节可以给我们提供实际发生情况的线索...
oldA
将是undefined
,而oldA(param)
无论如何都会抛出一个错误。向OP提供关于提升的链接是一个很好的贡献。 - Elias Van Ootegem(root || window)
会抛出错误。
ReferenceError: root未定义
。 - Mohammed Shareef Croot
在 NodeJS 中是全局对象的别名。在浏览器中,只需使用 window
。 - Elias Van Ootegem要在函数内访问全局 Js 变量,不要在函数作用域中使用 var,并在全局作用域中声明 var。
<script>
var foo = "hello";
function fxn() {
alert(foo);
foo = "bai";
}
fxn();
alert(foo+"out side");
</script>
a
的函数在这里 _无法被提升_,因为它是一个表达式。唯一会被提升的是变量声明。 - Elias Van Ootegemnode
环境中吗?如果是的话,尝试global.x = 10;
和alert(global.x)
。实际上,污染全局对象并不是一个好主意。但是,你可能想尝试一下。 - user405398