随笔分类 - js
摘要:大致从两个方向上进行判断, 1. 函数的返回结果只依赖于它的参数 2. 执行过程中没有副作用 对于第一点,下面看一个例子,func1中返回的值只依赖于传入的参数属于纯函数,而func2中返回的值依赖于外部参数x,是不纯的 var x = 1; function func1(a, b){ return
阅读全文
摘要:今天看某vue中nextTick的某篇博客时,其中经常提到事件循环机制,之前面试也经常被问到,所以点进了该niubility博主解释循环机制的博客。原来。。。。 宏任务并不是同步任务啊!!!之前一直理解错了。 在事件循环机制中,首先在调用栈中执行主线程上的所有同步任务。此时web API会对异步任务
阅读全文
摘要:首先了解一下设计原则: 单一职责原则(SRP):一个对象或一个方法只做一件事情。如果一个方法承担了过多的事情,那么在需求更改的时候,需要改写这个方法的可能性就越大。应该把对象或方法划分为更小的粒度。 最少知识原则(LKP):一个软件实体,应该尽可能少的与其他实体发生相互作用。应当尽量减少两个对象之间
阅读全文
摘要:宏任务: 当前调用栈中执行的任务,称为宏任务 微任务: 一次循环中的宏任务执行完成后,下一个宏任务执行之前,执行微任务,可以当做是回调函数 宏任务被放在在callback queue中,由事件触发线程维护;微任务被放在微任务队列中,由js引擎线程维护
阅读全文
摘要:AMD对于依赖的模块,是提前执行的,而CMD是延迟执行的,不过在requirejs2.0,AMD也支持延迟执行 AMD依赖前置,CMD依赖就近。 AMD在定义模块时就将依赖模块先写好,而CMD允许在要使用的时候再写入依赖模块,并且依赖于最近的模块 AMD的api是一对多的,比如require有全局r
阅读全文
摘要:AMD是浏览器端实现模块化的规范,实现了异步加载。通过require.js实现 定义无依赖的模块 define(function(){ ... return {模块} }) 定义有依赖的模块 define(['module1'..], function(m1..){ // 通过第一个参数将依赖的模块
阅读全文
摘要:什么是函数柯里化? 就是将一个多参数函数,转换为单一参数(原参数的第一个)的函数,并在其返回函数中传入余下参数、返回结果。 柯里化有哪些好处? 参数复用 在以下柯里化函数中,只需要第一次传入正则表达式,后面只要是检测同一正则表达式就只需调用返回的函数 function check(reg){ ret
阅读全文
摘要:在浏览器的事件中,包含宏任务和微任务。宏任务有:setImmediate,setTimeOut,setInterval,I/O,requestAnimationFrame,UI rendering,微任务有:promise,process.nextTick,Object.observe,Mutati
阅读全文
摘要:在js中存在一个history接口,其允许我们对浏览器访问历史进行操作 属性 history.length 只读属性,返回历史记录中元素的数目 方法 histoty.go() 跳转到相对于当前访问历史的位置,为正数时,参数为历史记录中排在当前记录之后的某条记录;为负数时,参数为历史记录中排在当前记录
阅读全文
摘要:直接通过form提交,直接method 通过ajax提交,将表单数据当做请求数据发送 当提交的表单中包含文件时,需要将form的encType设置为multipart/form-data
阅读全文
摘要:DOM2事件流 事件捕获阶段 处于目标阶段 事件冒泡阶段 事件捕获 当触发某个元素的事件时,会从顶层对象document发出一个事件流,随着dom树向目标元素节点流去,直到找到目标节点才停止。在捕获阶段,该事件的处理函数不会执行。 处于目标阶段 当到达目标元素时,触发相应事件,执行相应处理函数。 事
阅读全文
摘要:对于基本类型的数据,深拷贝与浅拷贝都相同,都是开辟一块新的空间,将数组赋值存入。旧值的改变不会影响新值,然鹅对于引用类型的数据就不相同了。 浅拷贝 对于引用类型的数据实行浅拷贝,当旧值发生改变时,新值也会改变,这是因为浅拷贝仅仅只是在栈中新开辟一块空间,将旧值存在栈中的指针复制给新值,新旧值指向的是
阅读全文
摘要:在通过new关键字创建对象时,分别做了一下几个步骤 创建一个空对象 改变构造函数中的this指向,使其指向空对象 执行构造函数中的代码(为空对象赋予属性和方法) 返回这个对象 而具体上,可以通过代码模拟实现 function Base() { } var obj = new Base(); // 创
阅读全文
摘要:prototype 每一个函数对象,都有一个prototype属性,这个属性指向函数对象的原型 funtion Person(name){ this.name = name } Person.prototype.age = 20; var per1 = new Person('ashen'); va
阅读全文
摘要:什么是高阶函数? 接收一个函数作为参数的函数 常见的高阶函数 reduce() 接收一个函数作为累加器,从左到右数组中的值依次缩减,最后累加成一个数 语法: reduce(funtion(total, currentNum, currentIndex, arr){}, initial) total:
阅读全文
摘要:每种方式的不同在于this的指向 作为函数直接调用 funtion func(a, b){ console.log(a + b); } func(1, 2) 以上的函数是属于全局对象的函数,在html中此函数是属于html全局对象的,在window中此函数是属于window全局对象的。 因此,在浏览
阅读全文
摘要:什么是闭包? var local = 10; funtion foo(){ console.log(local) } 其实上面的代码,就表示一个闭包。也就是:函数,以及函数内部能访问到的变量的集合 但通常情况下使用闭包时,是使用函数嵌套函数实现的,如下 funtion foo(){ var loca
阅读全文
摘要:基本数据类型的数据,当改变时,是指针指向的改变;而引用数据类型的数据改变时,是值的改变 基本数据类型存储在内存的栈中;引用数据类型存储在内存的栈和堆中 基本数据类型进行比较时,是比较值;而引用数据类型比较时,是 比较指针的指向 基本数据类型不可以添加属性和方法,引用数据类型可以 将一个基本数据类型的
阅读全文
摘要:== 在比较两个数据是否相等时,如果数据类型不同,会先进行隐式类型转换再比较 在比较两个数据时,必须数据类型和数值完全相同才返回true Object.is 返回两个数据是否相等的布尔值 比较数据时,是比较指针的指向,而不只是比较值是否相等 var str1 = "ashen"; var str2
阅读全文
摘要:在ES5中,通过defineProperty()进行监听 假设对user对象的name属性进行监听,当设置name属性值时,会执行相应的函数 Object.defineProperty(user, 'name', { set : funtion(value){ name = value; conso
阅读全文

浙公网安备 33010602011771号