JS零碎知识<2>

原创 前端工程师_钱成 随笔 js知识 264阅读 2018-04-14 23:37:42 举报

一、函数节流和函数去抖
1、函数节流(throttle):就是当事件触发之后,按照一个固定时间间隔执行函数。
2、函数去抖(debounce):就是当事件触发之后,按照一个固定时间间隔执行函数。假若在等待的时间内,事件又触发了重新开始计时。
来源:https://www.cnblogs.com/chenjinxinlove/p/6093246.html
二、new Date()的运行结果(????)
1、在服务器端,参数和返回值均是格林尼治时间,比如nodejs下
2、在客户端,参数和返回值均是本地时间,比如html下
三、继承的几种方式
1、构造函数继承:
在子类构造函数内部,把父类构造函数的this换成子类的this,并且给子类实例增加属性。
2、原型链继承:
将父类的实例赋给子类的原型,并且给子类的原型增加属性。
3、实例继承:
在子类构造函数内部,new父类的实例并用变量接收,并给该变量增加属性,再返回该变量。
4、拷贝继承:
在子类构造函数内部,new父类的实例并遍历该实例的属性,复制到子类的原型上,再给该子类的原型增加属性。
5、组合继承:
构造函数继承+原型链继承
6、寄生组合继承:
构造函数继承+原型链继承(原型链所在的新构造函数为空)。
附1、Drag.prototype._proto_=EventEmitter.prototype;//这是更安全的继承方法,一般在Node里都是采用这种方式实现继承。IE不支持
附2、Drag.prototype=new EventEmitter;//相对这种方式来说,上边的写法更安全
四、Promise的执行流程(箭头函数的this总是指向实例对象)
(1)定义一个函数,在这个函数里,首先给Promise类传进一个函数参数用来定义个性化的逻辑,这个函数参数传入两个函数参数作为成功的回调和失败的回调。
(2)定义的那个函数执行时,首先new出Promise类的实例,即Promise类里的代码执行。执行到Promise类的参数函数时遇上异步,于是用then为Promise类注册成功和失败的回调,然后继续执行异步,调用成功或失败的回调。
六、运行结果

七、函数的创建方式
(1)函数声明: function sum1(n1,n2){ return n1+n2 };
(2)函数表达式:又叫函数字面量 var sum2=function(n1,n2){ return n1+n2; };
(3)函数构造法:参数必须加引号 var sum3=new Function('n1','n2','return n1+n2');console.log(sum3(2,3));//5
(4)自执行函数
八、函数的调用方式
(1)直接调用
(2)对象调用
(3)new调用
(4)call、apply调用
九、原生js事件
(1)DOM0事件模型:直接在dom对象上注册事件名称
(2)DOM2事件模型:通过addEventListener和removeEventListener注册事件
十、js 错误Error对象详解
来源:https://www.jb51.net/article/124210.htm
(1)概念
error,指程序中的非正常运行状态,在其他编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。ECMAScript定义了六种类型的错误。除此之外,还可以使用Error构造方法创建自定义的Error对象,并使用throw语句抛出该对象。
A、ReferenceError:引用错误,例如变量没定义,console.log(b) // Uncaught ReferenceError: b is not defined
B、TypeError:类型错误,例如用数字调用函数方法,123() // Uncaught TypeError: 123 is not a function
C、SyntaxError:语法错误,例如变量名首字符为数字,var 1a // Uncaught SyntaxError: Unexpected number
D、RangeError:使用内置对象的方法时,参数超范围,例如[].length = -5 // Uncaught RangeError: Invalid array length
E、URIError:URI错误,例如decodeURI("%") // Uncaught URIError: URI malformed at decodeURI
F、EvalError:错误的使用了Eval,在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。
(2)错误处理,即使程序发生错误,也保证不异常中断的机制。

使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低;在try中,尽量少的包含可能出错的代码;无法提前预知错误类型的错误,必须用try catch捕获;finally可以省略;
(3)、抛出自定义错误
何时:函数的定义者需要告知函数的调用者此处出错,本函数内,剩下的代码不再执行;
如何:throw new Error("提示文字");

十一、js 如何实现sum(2,3)===sum(2)(3)

十二、普通函数与箭头函数对照
总:var 变量=(参数)=>函数体
1、普通函数:var f=function(){return 5}
箭头函数:var f=()=>5
2、普通函数:var f=function(v){return 5}
箭头函数:var f=(v)=>5
3、普通函数:map(function(){return 5})
箭头函数:map(()=>5)
4、普通函数:map(function(v){return 5})
箭头函数:map(v=>5)

十三、获取服务器端时间

十三、循环与定时器

十四、前端向后台发送请求有几种方式?
1、link标签的href属性
2、script标签的src属性
3、img标签的src属性
4、ajax发送请求
5、表单提交发送请求
6、a标签的href发送请求
7、iframe的src属性发送请求
十五、其它
1、事件参数
(1)<div onclick="myFunction(event,'event')"></div>
(2)<div ng-click="myFunction($event, myInput.value)"></div>
(3)abc.onclick=function(event){//这里的event是事件参数,一般情况下这里是没有参数的}
2、“=”
(1)数学中的“=”,是过程的最终结果,其前面是过程,后面是结果。
(2)编程中的“=”,是赋值,把其后的值赋值给前面的变量。
3、高阶函数,把函数作为参数或者返回值的函数。
4、问号传参:随机数防止缓存,后台不需要这个数;
十六、用div模拟<select>标签时,下拉框超出下方区域,浮于上方的实现代码

十六、什么是预解释?
在当前作用域下,在JS代码执行之前,浏览器会对带var和带function进行提前声明或定义;
十七、函数定义和执行阶段:
1、定义3阶段:
1)开辟一个空间地址
2)把函数体中的所有JS代码做为字符串存在这个空间中
3)把空间地址赋值给函数名
2、调用4阶段:
1)形成一个私有作用域
2)给形参赋值
3)预解释
4)代码从上到下的执行;

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复