【发布时间】:2012-04-14 01:34:21
【问题描述】:
考虑代码:
window.a = function(x){
var r = x*2;
window.a =alert; // redefines itself after first call
return r;
};
a('2 * 2 = '+a(2)); // doesn't work. it should've alerted "2 * 2 = 4"
这也不起作用:
window.a = function(x){
alert(x);
window.a = function(x){ // redefines itself after first call
var r = x*2;
return r;
}
};
a('2 * 2 = '+a(2)); // doesn't work. it should've alerted "2 * 2 = 4"
这也不是:
window.a = function(x){ alert(x); window.c = window.a; window.a = window.b; window.b = window.c; };
window.b = function(x){ var r = x*2; window.c = window.b; window.b = window.a; window.a = window.c; return r; };
a('2 * 2 = '+a(2)); // doesn't work.
基本上我已经尝试了所有可能的方法,但似乎都没有完成这项工作。谁能解释一下原因?
【问题讨论】:
-
只是出于好奇,你为什么要这么做?
-
嗯,第一个确实对我有用(Chrome 18)
-
在 Chrome 和 IE 中运行良好...
-
作为一般提示:在浏览器的 JS 控制台中尝试一下。如果你这样做了,你会很快发现 JS 函数可以做你想做的事;你只需要按照正确的顺序去做。先评估
var r = a(2),然后评估a('2 * 2 = ' + r) -
有趣的是它可以在 Chrome 中运行。它不应该(见我的回答),在 Firefox 或 Opera 中也不应该。
标签: javascript scope definition redefinition