重写现有的JavaScript Array.prototype方法会导致无限递归吗?
我知道重写现有的JavaScript Array.prototype方法会导致无限递归吗?,javascript,node.js,Javascript,Node.js,我知道pop()是JavaScript数组中的内置方法。我只是随便玩玩,为了好玩,我决定重写内置的原型方法,遇到了这种情况,并且没有解释引擎盖下发生了什么 当在节点REPL或文件中运行下面的代码时,它会在我的Windows 10系统中创建无限递归。我正在运行的节点版本是v.8.9.1 Array.prototype.pop=function(){ console.log(this); } 常数a=[1,2,3]; a、 pop(); 如果有人能解释这一现象,那将是惊人的 我认为这是节点引擎中的
pop()
是JavaScript数组中的内置方法。我只是随便玩玩,为了好玩,我决定重写内置的原型方法,遇到了这种情况,并且没有解释引擎盖下发生了什么
当在节点REPL或文件中运行下面的代码时,它会在我的Windows 10系统中创建无限递归。我正在运行的节点版本是v.8.9.1
Array.prototype.pop=function(){
console.log(this);
}
常数a=[1,2,3];
a、 pop();
如果有人能解释这一现象,那将是惊人的 我认为这是节点引擎中的一些东西 如果我使用V8发动机,它会按预期工作。
但不能使用节点引擎 加:
如果使用
slice
更改pop
,无论引擎如何,它都可以正常工作
因此,我们可以推断这是
Array.prototype.pop
中节点内的一个bug,该代码正常工作-它将数组记录到控制台。提供的代码在按说明运行时没有递归。请尝试在REPL或中运行代码,方法是使用代码运行节点文件。出于某种原因,它在我的系统中是无限递归的。我正在运行Node v8.9.1,找不到源代码,但逻辑上的解释是,console.log
方法在某个数组上调用pop()
,由于此方法本身调用console.log,因此最终会进入无限循环。我不想进入我的soapbox,但是。。。这就是为什么你不应该修改globals!不,它在console.log中