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