為什么JavaScript代碼會出現(xiàn)棧溢出

var a = 2
        function add(b, c) {
            console.trace() 
            return b + c
        }
        function addAll(b, c) {
            var d = 10
            result = add(b, c)
            return a + result + d
        }
        addAll(3, 6)

我們進行分析上面代碼在棧是時候是如何進行執(zhí)行的

  1. 從圖中你也可以看出句柠,變量a秕铛、函數(shù)add和addAll都保存到了全局上下文的變量環(huán)境對象中住涉。全局執(zhí)行上下文壓入到調(diào)用棧后木人,JavaScript引擎便開始執(zhí)行全局代碼了
  2. 執(zhí)行到 a 然后賦值a = 2信柿, 開始執(zhí)行 addAll 代碼 創(chuàng)建addALL上下文 壓入棧中,然后在進行執(zhí)行 d = 10 醒第,執(zhí)行到result 的時候 開始執(zhí)行 add 函數(shù) 并創(chuàng)建上下文 壓入調(diào)用棧中 并執(zhí)行內(nèi)部代碼 返回9 把add的調(diào)用棧從棧中彈出渔嚷,然后開始執(zhí)行 allAll 調(diào)用棧并得出結(jié)果返回,并彈出棧淘讥, 這個時候棧全部結(jié)束 代碼執(zhí)行完成圃伶。

每調(diào)用一個函數(shù),JavaScript引擎會為其創(chuàng)建執(zhí)行上下文蒲列,并把該執(zhí)行上下文壓入調(diào)用棧窒朋,然后JavaScript引擎開始執(zhí)行函數(shù)代碼。
如果在一個函數(shù)A中調(diào)用了另外一個函數(shù)B蝗岖,那么JavaScript引擎會為B函數(shù)創(chuàng)建執(zhí)行上下文侥猩,并將B函數(shù)的執(zhí)行上下文壓入棧頂。
當前函數(shù)執(zhí)行完畢后抵赢,JavaScript引擎會將該函數(shù)的執(zhí)行上下文彈出棧欺劳。
當分配的調(diào)用棧空間被占滿時铅鲤,會引發(fā)“堆棧溢出”問題划提。
棧是一種非常重要的數(shù)據(jù)結(jié)構(gòu),不光應(yīng)用在JavaScript語言中邢享,其他的編程語言鹏往,如C/C++、Java骇塘、Python等語言伊履,在執(zhí)行過程中也都使用了棧來管理函數(shù)之間的調(diào)用關(guān)系。所以棧是非晨钗ィ基礎(chǔ)且重要的知識點唐瀑,你必須得掌握。
為什么JavaScript代碼會出現(xiàn)棧溢出

  fucntion add (a,b) {
    add(a,b)
    returen a + b ;
  }
  add(1,2)

1.上面代碼的代碼為什么會棧溢出插爹, 是因為他是遞歸調(diào)用這個函數(shù)哄辣,他一直執(zhí)行這個函數(shù),然后他一直把函數(shù)壓入棧中,棧是有最大值的柔滔,如果超出了棧最大值溢陪,就會出現(xiàn)棧溢出的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睛廊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杉编,更是在濱河造成了極大的恐慌超全,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邓馒,死亡現(xiàn)場離奇詭異嘶朱,居然都是意外死亡,警方通過查閱死者的電腦和手機光酣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門疏遏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人救军,你說我怎么就攤上這事财异。” “怎么了唱遭?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵戳寸,是天一觀的道長。 經(jīng)常有香客問我拷泽,道長疫鹊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任司致,我火速辦了婚禮拆吆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脂矫。我一直安慰自己枣耀,他們只是感情好,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布羹唠。 她就那樣靜靜地躺著奕枢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佩微。 梳的紋絲不亂的頭發(fā)上缝彬,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音哺眯,去河邊找鬼谷浅。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的一疯。 我是一名探鬼主播撼玄,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墩邀!你這毒婦竟也來了掌猛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤眉睹,失蹤者是張志新(化名)和其女友劉穎荔茬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竹海,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡慕蔚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斋配。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孔飒。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艰争,靈堂內(nèi)的尸體忽然破棺而出坏瞄,到底是詐尸還是另有隱情,我是刑警寧澤园细,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布惦积,位于F島的核電站,受9級特大地震影響猛频,放射性物質(zhì)發(fā)生泄漏狮崩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一鹿寻、第九天 我趴在偏房一處隱蔽的房頂上張望睦柴。 院中可真熱鬧,春花似錦毡熏、人聲如沸坦敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狱窘。三九已至,卻和暖如春财搁,著一層夾襖步出監(jiān)牢的瞬間蘸炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工尖奔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搭儒,地道東北人穷当。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像淹禾,于是被迫代替她去往敵國和親馁菜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文基于win-xp-SP3铃岔,實際內(nèi)存地址與環(huán)境有差異汪疮,需按實際調(diào)試結(jié)果為準。 基礎(chǔ)概念 VA = Image B...
    十八磚閱讀 747評論 0 0
  • 轉(zhuǎn)載德撬,詳見原文:https://blog.csdn.net/aemperor/article/details/47...
    andy_shx閱讀 1,538評論 0 0
  • ”Pwn”是一個黑客語法的俚語詞 铲咨,是指攻破設(shè)備或者系統(tǒng) 。發(fā)音類似“砰”蜓洪,對黑客而言,這就是成功實施黑客攻擊的聲...
    charlie_heng閱讀 21,285評論 3 19
  • 譯者注:本文源自《[細節(jié)剖析]X Windows中一個22年的漏洞》中提到的一篇文章坯苹,即如何溢出有保護機制的lin...
    Letcos閱讀 709評論 0 0
  • 今天感恩節(jié)哎隆檀,感謝一直在我身邊的親朋好友。感恩相遇粹湃!感恩不離不棄恐仑。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,562評論 0 11