我想在下面的hook函數中使用全局變量'x'。如何訪問JavaScript中的函數鉤子的全局變量?
var x = 10; //global variable
var oldA = a;
a = function a(param){
alert(x); //showing error: x is undefined
return oldA(param);
}
如何解決錯誤?
我想在下面的hook函數中使用全局變量'x'。如何訪問JavaScript中的函數鉤子的全局變量?
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
當然,如果你是在嚴格模式下,您還需要小心隱含的全局變量。
這就是我所能想到的那就是你的代碼出錯了,更多的細節可能會爲我們提供實際發生的線索......
+1關閉,並感謝糾正我的錯誤:) – Praveen
@ user1671639:thx。我不會把你的評論稱爲錯誤,因爲變量聲明畢竟是懸而未決的。對於OP的代碼片段,'oldA'將會是'undefined','oldA(param)'會以任何方式拋出錯誤。向OP提供提升鏈接是一個很好的貢獻。 –
@EliasVanOotegem '(root || window)'在mozilla firefox控制檯中拋出錯誤。 'ReferenceError:未定義根目錄' –
要訪問函數內部的全局Js變量,請不要使用Var in函數範圍並在全局範圍內提及var。例如,
<script>
var foo = "hello";
function fxn() {
alert(foo);
foo = "bai";
}
fxn();
alert(foo+"out side");</script>
<script>
也應該看看周圍[劃定範圍和提升](http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) – Praveen
@ user1671639:分配給功能'了'_cannot是在這裏懸掛,因爲這是一個表達。唯一在這裏被升起的是變量聲明 –
你是否處於'node'環境?在這種情況下,請嘗試'global.x = 10;'&'alert(global.x)'。其實,污染全球物體並不是一個好主意。但是,你可能想嘗試一下。 – 2013-06-28 11:27:29