摘要:总结记录常见的五种类型报错语法解析错误变量未定义变量类型错误数组越界相关函数参数错误能防止报错导致后面代码不能执行问题的未定义不影响后面函数的执行注意点在报错前,不执行里的内容不报错也不执行在报错后,的内容不会被执行执行完结束,如果有
总结记录 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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98230.html
摘要:正则表达式如何创建正则表达式字面量创建通过构造函数正则表达式实例属性及方法三个修饰符属性,只读不可修改正则表达式是否添加了忽略大小写的修饰符,返回一个布尔值正则表达式是否添加了全局匹配的修饰符,返回一个布尔值正则表达式是否添加了换行的修饰符 正则表达式 如何创建正则表达式 字面量创建var r = /a/; 通过构造函数var r = new RegExp(a); 正则表达式实...
摘要:快速排序看名字知特点就是快效率高它是处理大数据最快的排序算法之一奇妙的记忆点内排序不稳定基本思想通过一趟排序把待排序记录分为独立的两部分其中一部分记录的关键字都比另一部分的关键字笑则分别对两部分继续进行排序以达到整个序列有序自己的理解其实就 快速排序(Quick Sort) 看名字知特点,就是快,效率高.它是处理大数据最快的排序算法之一.奇妙的记忆点: 内排序 不稳定 基本思想 通...
摘要:原始类型的值只有四种字符串数值必须以十进制表示布尔值和不能使用和。字符串必须使用双引号表示,不能使用单引号。数组或对象最后一个成员的后面,不能加逗号。 JSON对象 补充记录一下,有些方法很需要熟练记忆的 JSON对象的规定 JSON对象对值有严格的规定 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和...
摘要:奇妙的记忆点不稳定内排序基本思想分为两步建堆与维持堆的性质首先我们要先理解堆是什么东西堆其实就是一个完全二叉树我们可以使用顺序表存储一个二叉树如下图所示来存储其中分为最大堆最小堆而最大堆就是上头大下头小最小堆则反之明白了堆的定义我们就可以开 奇妙的记忆点: 不稳定 内排序 基本思想: 分为两步,建堆与维持堆的性质,首先我们要先理解堆是什么东西.堆其实就是一个完全二叉树,我们可以使用...
摘要:原型要掌握这三者之间的关系,通过代码例子记录一下自身属性的这里就是通过代码看一下做了什么默认情况下,将的所有属性包括继承的赋值给有什么东西呢自己的原型链,添加一个属性,用来指明对象的谁构造的自身全部属性,这边构建一个空对象原型,所以没有自有 原型 要掌握这三者之间的关系prototype,constructor,__proto__通过代码例子记录一下 function F() { ...
阅读 2911·2021-11-11 16:55
阅读 958·2021-09-28 09:36
阅读 3808·2021-09-22 15:22
阅读 2241·2021-09-06 15:12
阅读 1772·2021-08-19 10:55
阅读 2896·2019-08-30 12:52
阅读 507·2019-08-29 14:03
阅读 1213·2019-08-29 12:27