日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS 异常: Uncaught RangeError: Maximum call stack size exceeded

發(fā)布時間:2024/4/14 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS 异常: Uncaught RangeError: Maximum call stack size exceeded 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

遇到了這個js異常, 總是吧瀏覽器搞崩潰,這是什么原因呢?

開始我也只能想到死循環(huán), 也許是哪個條件判斷寫錯了,其實不是。經(jīng)過google,發(fā)現(xiàn)了一篇文章,內(nèi)容請看:

=================================================================

文章地址:?http://www.zizhujy.com/blog/post/2012/03/18/Uncaught-RangeError-Maximum-call-stack-size-exceeded.aspx

在此,非常感謝該文章作者的分享,本文完全轉(zhuǎn)載自上面鏈接,此處作為備份,個人查看使用。

一、問題:

今天在做網(wǎng)頁時突然碰到這樣的JavaScript錯誤:

Uncaught RangeError: Maximum call stack size exceeded

百思不得其解,千次調(diào)試找不到原因。

表面上看,是因為遞歸次數(shù)太多導致內(nèi)存被耗費太多,但是我的程序中,并沒有一處使用遞歸算法啊。

二、原因:

最終冷靜地思考了良久,終于發(fā)現(xiàn),問題的根源在于網(wǎng)頁中引用了兩個不同的JavaScript庫,而這兩個庫都對JavaScript原始對象的某些方法做了修改,從而導致出現(xiàn)了循環(huán)引用。具體說來,就是這么回事兒:

網(wǎng)頁H引用了js庫A和B,而A與B中對Math.pow方法都作了修改,如下圖所示:

?

如果對Math.pow()方法的修改只進行一次,那么是不會有問題的:先用Math.power存儲了Math.pow的原始版本,然后再用新的代碼替換Math.pow。

然而,在第二個庫中,又執(zhí)行到 Math.power = Math.pow時,那么Math.power就不再是保存Math.pow的原始版本了,

因為Math.pow已經(jīng)被第一個庫改成了新代碼,所以在Math.pow的新代碼中調(diào)用Math.power()時,本意是調(diào)用原始版本,而實際上,

卻是調(diào)用自己了。于是造成了循環(huán)!

?

三、解決方案:

在進行替換前加一行判斷代碼,避免重復使用相同的方法名。

四、備注:

看到這里,也許會有人感到奇怪,為什么要對原始的Math.pow()方法進行替換呢?這里的替換代碼似乎除了降低它的效率外,

什么也沒做。實際上,這里只是說明問題原因的一個示例,所以用了蠢代碼,但是簡單。為什么要對Math.pow()進行替換,

因為原始的Math.pow()有一個Bug,就是對負數(shù)求比如 1/3 次方,就會返回不正確的結果NaN。

轉(zhuǎn)載于:https://www.cnblogs.com/ipoplar/p/4528786.html

總結

以上是生活随笔為你收集整理的JS 异常: Uncaught RangeError: Maximum call stack size exceeded的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。