日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

IE10 Error.stack 讓腳本調(diào)試更加方便快捷( 二 )


try {
var div = document.createElement(’div’);
div.appendChild(div);
} catch (e) {
throw new Error(e.toString());
}
}

然而,您可能將考慮是否要使用該模式 。這可能是最適用于實(shí)用工具庫開發(fā)的模式,特別是在您考慮代碼的意圖是否為隱藏 DOM 操作或簡單地實(shí)施某一任務(wù)的時(shí)候 。如果其目的為隱藏 DOM 操作,那么合并操作并引發(fā) Error 可能是我們需要選擇的正確方式 。
性能注意事項(xiàng)堆棧跟蹤的構(gòu)造始于錯(cuò)誤對象被引發(fā)之時(shí);構(gòu)造堆棧跟蹤需要查看當(dāng)前執(zhí)行堆棧 。為了防止遍歷特大堆棧過程中出現(xiàn)性能問題(甚至可能出現(xiàn)的遞歸堆棧鏈),默認(rèn)情況下,IE 僅將收集前十位的堆棧幀 。然而該設(shè)置可通過將靜態(tài)屬性 Error.stackTraceLimit 設(shè)置為另一數(shù)值而得以配置 。該設(shè)置是全局性的,而且必須在引發(fā)錯(cuò)誤之前 進(jìn)行變更,否則其將對堆棧跟蹤無效 。
異步異常當(dāng)某一堆棧是由異步回調(diào)(例如 timeout、interval 或 XMLHttpRequest)生成,那么異步回調(diào)(而非由異步回調(diào)創(chuàng)建的代碼)將位于調(diào)用堆棧的底部 。這將對跟蹤有問題的代碼產(chǎn)生某些潛在影響:如果您對多個(gè)異步回調(diào)使用相同的回調(diào)函數(shù),那么您將難于通過單獨(dú)檢查而確定是哪一回調(diào)產(chǎn)生了錯(cuò)誤 。讓我們對此前的示例稍作修改,我們將避免直接調(diào)用 sample(),而是將其放入超時(shí)回調(diào):

復(fù)制代碼代碼如下:
(function () {
’use strict’;
function squareRoot(n) {
if (n0)
throw new Error(’Cannot take square root of negative number.’);
return Math.sqrt(n);
}
function square(n) {
return n * n;
}
function pointDistance(pt1, pt2) {
return squareRoot((pt1.x - pt2.x)(pt1.y - pt2.y));
}
function sample() {
var pt1 = { x: 0, y: 2 };
var pt2 = { x: 12, y: 10 };
console.log(’Distance is: ’pointDistance(pt1, pt2));
}
setTimeout(function () {
try {
sample();
}
catch (e) {
console.log(e.stack);
}
}, 2500);
})();

一旦執(zhí)行該代碼段,您將發(fā)現(xiàn)堆棧跟蹤將出現(xiàn)稍許延遲 。此時(shí),您將同時(shí)發(fā)現(xiàn)堆棧底部并非全局性代碼,而是Anonymous function 。事實(shí)上,這并非同一匿名函數(shù),而是傳遞至 setTimeout 的回調(diào)函數(shù) 。由于您丟失了與掛起回調(diào)有關(guān)的上下文,因此您可能無法確定調(diào)用回調(diào)的內(nèi)容 。如果在某一應(yīng)用場景中,系統(tǒng)注冊了某一回調(diào)來處理許多不同按鈕的 click 事件,那么您將無法分辨注冊將引用哪一回調(diào) 。話雖如此,這一限制作用畢竟有限,因?yàn)樵诖蠖鄶?shù)情況中,堆棧頂部可能將突出顯示問題區(qū)域 。
觀看體驗(yàn)演示

IE10 Error.stack 讓腳本調(diào)試更加方便快捷


了解 Windows 8 Consumer Preview 中 IE10 的使用情況 。您可在 eval 的上下文中執(zhí)行代碼,如果發(fā)生錯(cuò)誤,您便可檢查出該錯(cuò)誤 。如果您在 IE10 內(nèi)運(yùn)行代碼,由于您可將錯(cuò)誤代碼行懸停于堆棧跟蹤中,因此您也可突出顯示您的代碼行 。您可自行將代碼輸入到代碼區(qū)域,或者從列表中的數(shù)個(gè)示例中進(jìn)行選擇 。此外,您還可在運(yùn)行代碼示例時(shí)設(shè)置 Error.stackTraceLimit 值 。
【IE10 Error.stack 讓腳本調(diào)試更加方便快捷】如欲查看參考材料,請瀏覽有關(guān) Error.stack 和 stackTraceLimit 的 MSDN 文檔 。

推薦閱讀