javascript - Array.apply(null, new Array(124995)) 为何报错?
ringa_lee
ringa_lee 2017-04-10 14:33:01
[JavaScript讨论组]

我在 Chrome Stable 里测试的:

Array.apply(null, new Array(124995))

报错是:

Maximum call stack size exceeded

小一个数字就不报错了.
然后在 Node 环境里尝试了一下, 这个数字要小不少, 但没往下去确定.

很奇怪, 这个表达式不是递归调用啊, 为什么报超出最大栈呢?

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
黄舟

首先你要知道new Array(124995)创建一个有124995个元素的数组,其中每个元素都是undefined
然后,X.apply(Y, [arg1, arg2, ...])的含义其实是Y.X(arg1, arg2, ...),在你的程序里,你在用一个有124995个元素的数组调用Array函数,相当于null.Array(undefined, undefined, ...),参数共有124995个。
虽说没有递归,但是函数调用时会把每个参数都放在stack里,你一下放了十几万个,stack就爆掉了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号