Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写现有的JavaScript Array.prototype方法会导致无限递归吗?_Javascript_Node.js - Fatal编程技术网

重写现有的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中