Ваш код отлично работает для меня, но вы можете явно преобразовать 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
Конечно, если вы работаете в строгом режиме, вам нужно быть осторожным и с подразумеваемыми глобальными переменными.
Это все, что я могу придумать, что с вашим кодом что-то не так. что происходит на самом деле...
person
Elias Van Ootegem
schedule
28.06.2013
a, не может быть поднята здесь, так как это выражение. Единственное, что здесь поднимается, — это объявления переменных. - person Elias Van Ootegem   schedule 28.06.2013nodeсреде? В этом случае попробуйтеglobal.x = 10;иalert(global.x). На самом деле, загрязнять глобальный объект — плохая идея. Но, возможно, вы захотите попробовать. - person   schedule 28.06.2013