摘要:總結記錄常見的五種類型報錯語法解析錯誤變量未定義變量類型錯誤數組越界相關函數參數錯誤能防止報錯導致后面代碼不能執行問題的未定義不影響后面函數的執行注意點在報錯前,不執行里的內容不報錯也不執行在報錯后,的內容不會被執行執行完結束,如果有
總結記錄 try-catch-finally
常見的五種類型報錯
SyntaxError語法解析錯誤
ReferenceError變量未定義
TypeError變量類型錯誤
RangeError數組越界
URIErrorURI相關函數參數錯誤
try-catch能防止報錯導致后面代碼不能執行問題
try { a //a的未定義不影響后面函數的執行 } catch (e) { console.log(e); } (function f() {})()
注意點
在報錯前return,不執行catch里的內容,不報錯也不執行
function f() { try { return "123"; a; } catch(e) { console.log(e); } } console.log(f()); //123
function f() { try { var a; } catch(e) { console.log(e); } } console.log(f()); //undefined
return在報錯后,return的內容不會被執行,執行完catch結束,如果有finally語句就再執行finally然后結束
function f() { try { a; return 123; } catch(e) { console.log(e); } finally { console.log("執行finally"); } } console.log(f()); //ReferenceError 執行finally undefined //之所以是undefined不是123是因為先報錯執行catch了
finally不管是否報錯以及是否return,都會執行,
對于try中在沒有報錯下return的內容會先保存不輸出,先進行finally內容執行
var count = 0; function f() { try { return count; } catch(e) { console.log(e); } finally { count ++; console.log(count); } } console.log(f()); //1 0 說明return count 時count的值先被記錄了只是未返回
總結:先報錯:先執行catch,再finally;遇到return:先保留其值,再在執行finally,最后return結果,return可以覆蓋在finally中遇到return就直接返回結果了
變量提升只有變量申明和函數申明才會提升
if(0) {function a() {}} 不建議內部申明函數,變量提升時a是undefined
預編譯步驟:
創建go對象,所有全局的申明都被提升,函數申明優先于變量申明(同名時函數覆蓋變量),結果函數預編譯成函數,變量為undefined
//console.log(f); //? f() {} var f; //console.log(o); //undefined var o; function f() {}; //console.log(g) //ReferenceError: g is not defined 這是表達式,不被提升 (function g() {}); //console.log(d) //ReferenceError: d is not defined 這是表達式,不被提升 (function d() {})(); //console.log(y) //undefined y是變量申明 當然t也是報錯,t is not defined var y = function t() {}; //console.log(c) //ReferenceError: c is not defined 這是表達式,不被提升 c = 1; //console.log(h) //ReferenceError: h is not defined 這是表達式,不被提升 console.log(k); //undefined if (function h() {}) { var k; }
函數執行時創建ao對象
創建this以及arguments對象
找形參和變量申明 ,將變量和形參名作為ao對象屬性名,值為undefined
將實參值和形參統一
找函數聲明,將函數名作為ao對象的屬性名值為函數體
a = 100; function d(e) { function e() {}; arguments[0] = 2; console.log(e); //2 console.log(c); //un console.log(b); //un if(1) { var b = 123; function c () { } } var c; a = 10; var a; console.log(b); //123 f = 123; console.log(c); //function c() {} console.log(a); //10 } var a; d(1); console.log(a); //100 console.log(f); //123
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98230.html
摘要:正則表達式如何創建正則表達式字面量創建通過構造函數正則表達式實例屬性及方法三個修飾符屬性,只讀不可修改正則表達式是否添加了忽略大小寫的修飾符,返回一個布爾值正則表達式是否添加了全局匹配的修飾符,返回一個布爾值正則表達式是否添加了換行的修飾符 正則表達式 如何創建正則表達式 字面量創建var r = /a/; 通過構造函數var r = new RegExp(a); 正則表達式實...
摘要:快速排序看名字知特點就是快效率高它是處理大數據最快的排序算法之一奇妙的記憶點內排序不穩定基本思想通過一趟排序把待排序記錄分為獨立的兩部分其中一部分記錄的關鍵字都比另一部分的關鍵字笑則分別對兩部分繼續進行排序以達到整個序列有序自己的理解其實就 快速排序(Quick Sort) 看名字知特點,就是快,效率高.它是處理大數據最快的排序算法之一.奇妙的記憶點: 內排序 不穩定 基本思想 通...
摘要:原始類型的值只有四種字符串數值必須以十進制表示布爾值和不能使用和。字符串必須使用雙引號表示,不能使用單引號。數組或對象最后一個成員的后面,不能加逗號。 JSON對象 補充記錄一下,有些方法很需要熟練記憶的 JSON對象的規定 JSON對象對值有嚴格的規定 復合類型的值只能是數組或對象,不能是函數、正則表達式對象、日期對象。原始類型的值只有四種:字符串、數值(必須以十進制表示)、布爾值和...
摘要:奇妙的記憶點不穩定內排序基本思想分為兩步建堆與維持堆的性質首先我們要先理解堆是什么東西堆其實就是一個完全二叉樹我們可以使用順序表存儲一個二叉樹如下圖所示來存儲其中分為最大堆最小堆而最大堆就是上頭大下頭小最小堆則反之明白了堆的定義我們就可以開 奇妙的記憶點: 不穩定 內排序 基本思想: 分為兩步,建堆與維持堆的性質,首先我們要先理解堆是什么東西.堆其實就是一個完全二叉樹,我們可以使用...
摘要:原型要掌握這三者之間的關系,通過代碼例子記錄一下自身屬性的這里就是通過代碼看一下做了什么默認情況下,將的所有屬性包括繼承的賦值給有什么東西呢自己的原型鏈,添加一個屬性,用來指明對象的誰構造的自身全部屬性,這邊構建一個空對象原型,所以沒有自有 原型 要掌握這三者之間的關系prototype,constructor,__proto__通過代碼例子記錄一下 function F() { ...
閱讀 2897·2021-11-11 16:55
閱讀 944·2021-09-28 09:36
閱讀 3793·2021-09-22 15:22
閱讀 2223·2021-09-06 15:12
閱讀 1754·2021-08-19 10:55
閱讀 2888·2019-08-30 12:52
閱讀 495·2019-08-29 14:03
閱讀 1204·2019-08-29 12:27