ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 命令式思想 1. 相当于面向过程开发,一步一步自己实现 ``` const arr = [1,2,3,4] const newarr = [] for( let i = 0; i < arr.length; i++ ) { newarr.push( arr[i] * 2 ) } ``` ### 声明式思想 1. 只需要关注结果,不需要管过程是如何实现的 ``` const arr = [1,2,3,4] const newarr2 = arr.map(item => item * 2) ``` ### 闭包 1. 闭包中两大重要概念:变量的作用域 && 变量的生命周期 2. 作用域:目前有三大作用域:全局作用域 && 函数作用域 && 块级作用域 3. 函数作用域中声明的变量: 1. 如果未用var声明,则会变成全局变量 2. 在函数内声明的变量只能在函数内部进行使用,外部无法访问到函数内部的变量 3. 函数内使用的变量可以向上查找,不会向下级的作用域查找,直到找到全局作用域,也就是顶层作用域,形成了所谓的作用域链 4. 变量的生命周期: 1. 声明在全局内的变量会一直存在,除非主动删除,否则都可以访问 2. 声明在函数内部的变量会随着函数的调用完成,进行销毁 ``` function fn() { var a = 10 //调用完后该变量生命周期终止,并销毁 } fn() ``` 5. 闭包的核心:函数调用完后,其上下文执行环境不会进行销毁 6. 闭包的两种应用场景:1. 函数做为返回值,2. 函数作为参数传递 7. 闭包的开发应用场景: 1. 延续局部变量的寿命,解决部分低版本浏览器在创建HTTP请求的时候变量已经被销毁的bug 2. 把一些不需要暴露在全局下的变量,封装成局部变量 ``` var report = (function(){ var imgs = []; return function( src ){ var img = new Image(); imgs.push( img ); img.src = src; } })(); ``` ### 函数节流 1. 当某些事件被频繁的触发,其事件回调也被频繁的触发,从而引发了性能上的问题 2. 常见的导致频繁触发的事件是:window.onresize onmousemove touchmove 触发频率过高的函数 3. 解决思路:setTimeout ### 函数分时加载 1. 假如页面中现在有1000条数据,需要创建1000个DOM元素,一次性渲染浏览器会很耗性能,可能使用分时加载函数 ### 高阶函数 1. 满足两个条件之一都可以称为高阶函数:接收函数作为参数 || 函数作为返回值返回 ### 函数柯里化:curring 1. 函数柯里化又称部分求值,首先会接收一些参数,接收这些参数之后不会立即进行求值,而是继续返回另一个函数, 之前传入的参数在函数形成的闭包中保存起来,待真正需要求值的时候一次求出来 ### 命名空间 1. 命名空间可以减少全局变量的污染:声明为对象的属性,自执行函数,使用闭包包装私有变量,_init,可使用下划线区分