作用域
作用域是我们可以有效访问变量或函数的区域,包含全局作用域、函数作用域、块级作用域(ES6) 三种;
JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。它的作用域是指在词法分析阶段就确定了,不会改变。而与词法作用域相对的是动态作用域,
函数的作用域是在函数调用的时候才决定的。
函数的作用域在函数定义的时候就决定了,函数的作用域基于函数创建的位置。
作用域是我们可以有效访问变量或函数的区域,包含全局作用域、函数作用域、块级作用域(ES6) 三种;
JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。它的作用域是指在词法分析阶段就确定了,不会改变。而与词法作用域相对的是动态作用域,
函数的作用域是在函数调用的时候才决定的。
函数的作用域在函数定义的时候就决定了,函数的作用域基于函数创建的位置。
函数柯里化(function currying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,
该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保存起来。待到函数真正需要求值的时候,之前传入的参数都会被一次性用于求值。
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。
顾名思义,柯里化其实本身是固定一个可以预期的参数,并返回一个特定的函数,处理批特定的需求。这增加了函数的适用性,但同时也降低了函数的适用范围。
1 | function add(x,y){ |
JavaScript 一开始并没有内建模块化支持,也几乎没有模块化这种概念。当时没那么大的需求,搞个模块化显得大材小用啊。随着互联网的发展,尤其是 2006 年 ajax 技术的出现和之后 Web 2.0 的兴起,越来越多的业务逻辑向前端转移,前端开发的复杂程度和代码量逐渐提升。这时,由于缺乏模块化概念,JavaScript 的一些问题便凸显出来:代码难以复用、容易出现全局变量污染和命名冲突、依赖管理难以维护等等。一开始,开发者们使用诸如暴露全局对象、自执行函数等方法来规避这些问题,但仍无法从根本上解决问题。
概念:
随着前端应用体积的扩大,资源加载的优化是我们必须要面对的问题,动态代码加载就是其中的一个方案,webpack 提供了符合 ECMAScript 提案 的 import()
语法 ,让我们来实现动态地加载模块(注:require.ensure 与 import() 均为 webpack 提供的代码动态加载方案,在 webpack 2.x 中,require.ensure 已被 import 取代)。
在 React 16.6 版本中,新增了 React.lazy 函数,它能让你像渲染常规组件一样处理动态引入的组件,配合 webpack 的 Code Splitting ,只有当组件被加载,对应的资源才会导入 ,从而达到懒加载的效果。
1 | // 不使用 React.lazy |
React.lazy 接受一个函数作为参数,这个函数需要调用 import() 。它需要返回一个 Promise,该 Promise 需要 resolve 一个 defalut export 的 React 组件。
在控制台打印可以看到,React.lazy 方法返回的是一个 lazy 组件的对象,类型是 react.lazy,并且 lazy 组件具有 _status 属性,与 Promise 类似它具有 Pending、Resolved、Rejected 三个状态,分别代表组件的加载中、已加载、和加载失败三种状态。
需要注意的一点是,React.lazy 需要配合 Suspense 组件一起使用,在 Suspense 组件中渲染 React.lazy 异步加载的组件。如果单独使用 React.lazy,React 会给出错误提示。其中在 Suspense 组件中, fallback 是一个必需的占位属性,如果没有这个属性的话也是会报错的。
1 | // 延迟加载回调 不需要加载效果设置为null maxDuration可以设置最大持续时间 最新版本中已移除了这个属性 |
1 | npm install --save mobx mobx-react |
1 | // component |
1 | switch |
基本就这两种方法:immutable/observable mobx: oop redux: 函数式
ssr:流模式、字符串
在团队开发中,commit message(提交说明)就如同代码注释一样重要。良好的commit message能让团队中的其他成员对你的每次提交的目的、
涉及的代码范围及作用一目了然,方便日常的查询和帮助其他成员更好的帮你Code Review,必要时还能方便的生成Change log。