变量的解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

数组解构和对象解构在业务开发中有很大的用处可以多思考一种代码的实现方式。

    function add([x, y]){
      return x + y;
    }    
    add([1, 2]); // 3    
  
    //参数x的默认值0, y的默认值是0 然后整个参数的默认值是{}
    //function move({x = 0, y = 0} = {})  参数是一个对象
    function move({x = 0, y = 0} = {}) {
      return [x, y];
    }
    
    move({x: 3, y: 8}); // [3, 8]
    move({x: 3}); // [3, 0]
    move({}); // [0, 0]
    move(); // [0, 0]
    
    //参数{x,y}的默认值是{x:0,y:0}
    //function move({x, y} = { x: 0, y: 0 }) {
    function move({x, y} = { x: 0, y: 0 }) {
      return [x, y];
    }
    
    move({x: 3, y: 8}); // [3, 8]
    move({x: 3}); // [3, undefined]
    move({}); // [undefined, undefined]
    move(); // [0, 0]
    
    //加载模块
    const { SourceMapConsumer, SourceNode } = require("source-map");
    //提取 JSON 数据
    let jsonData = {
      id: 42,
      status: "OK",
      data: [867, 5309]
    };
    
    let { id, status, data: number } = jsonData;   
    console.log(id, status, number);
    let { log, sin, cos } = Math;

2018/1/9 posted in  ECMA6

Let 和 Const

let不允许在相同作用域内,重复声明同一个变量。

ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。

ES5 只有全局作用域和函数作用域,没有块级作用域,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。
<!-- more -->
const声明一个只读的常量。一旦声明,常量的值就不能改变。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。

ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

2018/1/9 posted in  ECMA6

持续继承与持续交付

它是一种软件开发实战,尽量保持每次集成都可以正常工作。

  • 版本管理工具
  • 持续集成服务器
  • 测试环境
主要流程
  • 维护同一个代码源
  • 自动化构建
  • 支持自动化测试
  • 频繁提交代码
  • 每次提交都应该执行构建
  • 让构建飞可能的快
  • 团队成员可以轻松访问
  • 支持自动化部署
工具选择与Pipeline设计
  1. 主服务器Master
  2. 从服务器Slave
  3. 代码服务器Agent
持续集成工具
  • 源代码控制系统
  • 依赖管理工具
  • 支持各种类型的测试
  • 可以使用插件来扩展系统
  • 支持流水线
  • 可视化结果 #####设计PopeLine工作流
2017/12/12 posted in  全栈应用开发