js

A collection of 21 posts

js

js事件循环机制Event Loops

关键名词主执行栈:会一直执行同步任务到结束,异步任务会通过任务队列Event Queue机制来进行协调异步任务又分为微任务micro task和宏任务macro task总结:任务优先级:先执行同步任务 > 微任务 > 宏任务微任务:browser环境(Promise.then catch finally、MutationObserver)、node环境(Promise.then catch finally、process.nextTick)宏任务:browser环境(setTimeout、setInterver、requestAnimationFrame)、node环境(setImmediate)注意:new Promise(resolve=>{ console.log('我是同步的') })

  • lhh
js

insertBefore、insertAfter

insertBefore:在已有元素前插入一个新元素 新元素:插入的元素(newElement)目标元素:新元素插入到哪个元素(targetElement)之前父元素:目标元素的父元素调用语法:targetElement.parentNode.insertBefore(newElement, targetElement) insertAfter实现:在现有元素后插入一个新元素 function insertAfter(newElement, targetElement){ var parentElement = targetElement.parentNode; // 获取父元素 // 判断targetElement是否为父元素最后一个子元素 if(parentElement.lastChild === targetElement){ // 父元素直接插入新元素 parentElement.appendChild(newElement); }else{ // 往目标元素的下一个兄弟元素前面插入新元素 parentElement.insertBefore(newElement, targetElement.nextSibling); } }

  • lhh
dom

javascript DOM 001

W3C对DOM的定义是:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容、结构和样式。 1998年10月完成了"第一级DOM"(DOMLever1) 兼容性查询:caniuse.com/ 一、节点:<p class="属性节点">文本节点<p> 元素节点(p标签节点)文本节点属性节点二、常用方法: document对象方法:getElementById(ie6+)/getElementsByTagName(ie6+)/getElementsByClassName(ie9+)// className查找的类名:不支持多类名、node查找的指定范围:不传则从html开始查找 function getElementsByClassName(className, node){ if(typeof className !== 'string')

  • lhh
vue

Vue Class Component

一、vuex定义 import Vue from 'vue' import Component from 'vue-class-component' import { mapGetters, mapActions } from 'vuex' // post接口 import { Post } from './post' @Component({ computed: mapGetters([ 'posts' ]), methods: mapActions([ 'fetchPosts' ]) }) export default class Posts extends Vue { // 在类属性声明映射的getter和action // 你可能需要添加 `!` 在类属性后面 // 为了避免编译错误(需要明确的赋值断言). // 映射getter posts!: Post[] // 映射action fetchPosts!

  • lhh
vue

Vue Class Component使用二

一、vue router hooks路由钩子 import Component from 'vue-class-component' // 注册路由钩子,必须在任何组件定义之前注册它们 Component.registerHooks([ 'beforeRouteEnter', 'beforeRouteLeaver', 'beforeRouteUpdate' ]) 二、类组件将它们实现为类原型方法 import Vue from 'vue' import Component from 'vue-class-component' @Component export default class HelloWorld extends Vue{ beforeRouteEnter(to, from, next){ console.log('beforeRouteEnter') next() } beforeRouteLeaver(to, from, next)

  • lhh
js

javascript递归和尾递归

一、递归 ,即一个函数内部不断循环调用自身函数,需要终止条件。 // 一个累加的递归函数 var s = new Date().getTime() function count(num){ if(num<=0){ return num } return num + count(num-1) } console.log( count(5) );//输出15 var e = new Date().getTime() console.log('执行时间', e-s)注意:此种递归方式会不断的把函数压入栈,如果num的数值越大,栈就会越大。二、尾递归,只存在一个函数在栈中。

  • lhh
js

javascript宽高

一、获取宽高 网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offsetWidth    (包括边线的宽); 网页可见区域高: document.body.offsetHeight   (包括边线的宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: document.body.scrollHeight; 网页被卷去的高: document.body.scrollTop; 网页被卷去的左: document.body.scrollLeft; 网页正文部分上: window.screenTop; 网页正文部分左: window.screenLeft; 屏幕分辨率的高: window.

  • lhh
js

javascript防抖和节流

概念防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。节流(throttle)与 防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。一、示例:监听scroll事件获取滚动条高度 //防抖函数 function debounce(fn, delay){ var timer = null;//存放定时器 return function(e){ clearTimeout(timer);//清除上一个定时器 //创建定时器任务,间隔内时间scroll事件连续触发,就不会执行fn函数 timer = setTimeout(()=>{ fn.

  • lhh
js

javascript-封装-103

完善一个类:利用闭包、自检测thisvar Book = (function(){ //静态私有变量 var _num = 0 //静态私有方法 function checkBook(){} //创建类 function _book (id, bookName){ //优化用户忘记使用new关键词实例化对象 //没有new关键词,this则指向Book函数执行所在的作用域(全局作用域window) if( !(this instanceof Book) ){ return new _book(id, bookName); } //私有变量 var name; //私有方法 function check(){} //特权方法 this.setName = function(){} this.getName = function(){} //对象公有属性

  • lhh
js

javascript-封装-101

函数的创建与管理一、减少污染全局变量 var checkName = function(){} var checkPassword = function(){} 1.1 用对象收编变量var CheckObject = { checkName: function(){}, checkPassword: function(){} } 1.2 用类的原型对象var CheckObject = function(){} CheckObject.prototype = { checkName: function(){ return this;//链式调用 }, checkPassword: function(){ return this; } };//注意:不可与CheckObject.prototype.xxx混用了 //实例化 var check = new CheckObject(); check.checkName().checkPassword(

  • lhh