美文网首页
前端笔记

前端笔记

作者: 金刚狼_3e31 | 来源:发表于2020-04-29 16:15 被阅读0次

     模块   module     功能集合,实现功能的方法,实现一系列功能的方法集合

     插件   plugin     能复用的模块

     组件   component  拆分逻辑结构样式(包括html/css/js文件),组件包含模块

     function factorial(n) {

            if (n === 0 || n === 1) {

                return 1;

            }

            return n * factorial(n - 1);

       }

        var times = 0,

            cache = [];

        function factorial0(n) {

            times++;

            if (cache[n]) {

                return cache[n];

            }

            if (n === 0 || n === 1) {

                cache[0] = 1;

                cache[1] = 1;

                return 1;

            }

            return cache[n] = n * factorial0(n - 1);

        }

        console.time('first');

        console.log(factorial(10));

        console.timeEnd('first');

        console.time('second');

        console.log(factorial0(10));

        console.timeEnd('second');

        函数记忆(缓存池技术) -> 应用场景:数据反复处理使用,数据大量计算,递归函数,频繁调用数据

        ([] + []).length   隐式类型转换  

        ({} + {}).length   隐式类型转换

        (function () {}).length   函数有length属性

        数组的扁平化 (Array.flat(param), param->数字、Infinity)

        function flatten(arr) {

            var arr = arr || [],

                res = [],

                elem;

            for (var i = 0, len = arr.length; i < len; i++) {

                elem = arr[i];

                if (isArr(elem)) {

                    res = res.concat(flatten(elem));

                } else {

                    res.push(elem);

                }

            }

            function isArr(obj) {

                return Object.prototype.toString.call(obj) === '[object Array]';

            }

            return res;

        }

        function flat(arr) {

            if (!isArr(arr)) {

                throw new Error('这方法只适用于数组类型!');

            }

            function isArr(obj) {

                return Object.prototype.toString.call(obj) === '[object Array]';

            }

            return arr.reduce((prev, item) => prev.concat(isArr(item) ? flat(item) : item), []);

        }

        改变原数组方法:pop push reverse shift unshift sort splice

        不改变原数组方法:concat join slice toString map every some filter reduce reduceRight

        不确定方法:map forEach

        var oList = document.getElementsByClassName("oList")[0];

        oList.addEventListener("click", function(e) {

            var e = e || window.event, // e是事件对象,做兼容性

                tar = e.target || e.srcElement; // 事件源对象

            switch (tar.innerText) {

                case 'inner1':

                    console.log('inner1');

                    break;

                case 'inner2':

                    console.log('inner2');

                    break;

                case 'inner3':

                    console.log('inner3');

                    break;

            }

        }, false);

        IE6常见BUG:

        1.盒子浮动  margin*2         解决:display: inline/block;

        2.外部一个盒子 相对定位

          内部一个盒子 绝对定位  

          right/left/top/bottom = 0  

          1px间隙                    解决:设置偶数宽高

        3.img 下方有白色的间隙       解决(3种):img设置block  调整vertical-align    font-size: 0;

        4.z-index失效                解决:父级元素设置position: relative; z-index: 1;(c层级比子元素低)

        5.没有内容的空div宽度设置0-19px, 但都是19px   解决(4种):overflow: hidden; font-size: 0  元素内加注释(<!--->)  元素内加空格(&nbsp;)

        link和@import区别:

        1. link是html标签,@import是css关键字

        2. 加载顺序不同:link是同时加载(异步),@import是页面加载完毕后加载

        3. link可以DOM操作,@import不可以

        4. @import会在css文件最前面加载,就算把代码放在css文件的最下面也是一样(多年经验总结出来)

        meta标签的几个属性要会

        css画三角形、等边三角形、梯形、六边形(1.拆分成中间是矩形,两边三角形用伪元素实现 2.3个盒子定位旋转实现)

        前端性能优化:

        webpack优化方案

        EventLoop异步更新

        浏览器缓存原理和最佳设置策略

        避免回流和重绘

        节流和防抖

        CDN缓存优化

        通过Performance监控性能

    相关文章

      网友评论

          本文标题:前端笔记

          本文链接:https://www.haomeiwen.com/subject/xhutvhtx.html