我写了这个:
alert = function(x) {
alert(x);
};
alert(1);
并显示了Firefox的控制台Too much recursion
和:
var x = alert;
alert = function(y) {
x(y);
};
alert(1);
完美运行。
为什么第二种方法有效而第一种方法无效?
并且foo=foo;有效。不alert=function(x){alert(x);};一样foo=foo;吗?
我写了这个:
alert = function(x) {
alert(x);
};
alert(1);
并显示了Firefox的控制台Too much recursion
和:
var x = alert;
alert = function(y) {
x(y);
};
alert(1);
完美运行。
为什么第二种方法有效而第一种方法无效?
并且foo=foo;有效。不alert=function(x){alert(x);};一样foo=foo;吗?
不,当你写的时候:
alert=function(x){alert(x);};
您正在创建一个函数,该函数在被调用时将无休止地调用自身,直到堆栈空间用完。您创建的“警报”符号将成为全局变量。在函数内部,当它被调用时,“警报”符号将被解析为该全局变量。
由于 JavaScript 的语义,函数中对变量的引用在每次调用函数时都会重新解析。如果在定义该函数之后,您执行了以下操作:
var otherAlert = alert;
window.alert = function() { console.log("Hello world"); };
然后调用“otherAlert”不会导致错误,因为此时“alert”将是一个不同的全局函数。