20 Dec 2016
解构赋值语法是ES6的新特性,我们可以借助解构赋值写出简短优雅的代码,多运用解构赋值可以很大的提高
代码的可读性,提高开发效率。现在很多转译工具(如Babel)会帮助我们处理解构赋值语句,自动兼容低版
本的JS引擎,所以我们需要读一读这些辅助代码,才能知道工具为我们做了什么。
解构赋值大致有如下的几种用法:
交换变量
let a = 0
let b = 1
let c = 2
[a, b, c] = [b, c, a]
会被转译为:
"use strict";
var a = 0;
var b = 1;
var c = 2;
var _ref = [b, c, a]...
18 Dec 2016
JavaScript中的循环语句大致可以分为:条件循环(for/while),属性枚举(for-in),Array方法
(forEach)几种,而ES6又新增了一种循环语句for-of,用于可迭代对象的循环。
迭代器实际上是一种设计模式,用于提供顺序访问容器内元素的方法,而不需要了解具体的实现。如果说之前
的JS中,迭代器只是以模式来运用的话,那么在ES6之后JS则是对迭代器提供了系统级的支持,任何JS对象
只要实现了可迭代协议,就可以通过统一的for-of方式实现迭代。
可迭代对象:
对象实现了@@iterator方法(即具有Symbol.iterator属性),则认为该对象是可迭...
12 Dec 2016
现在的前端工程已经离不开转译器和打包工具了,随着前端工程的越来越自动化,我们的开发效率的确得到了
极大的提升,但是,作为一个程序员,单单只是会使用工具是不够的。工具在帮助我们完成一些任务的同时也
屏蔽了一些重要的细节,而细节不容忽视,所以我们回过头来看看工具自动生成的代码还是很有必要的。
今天就先研究一下rollup的模块打包格式
先介绍一下工具链:
babel@6.18 使用es6
rollup@0.36
命令rollup -h告诉我们bundle的输出格式可选5种,分别是:[amd, cjs, es, iife, umd],其中
umd据说可以适配所有的模块环境,那...
11 Dec 2016
JavaScript与其他语言相比有一个奇怪的特性——变量提升(Hoisting),ECMA-262标准中并未明确定义
这种行为,但我们还是要了解清楚这个特性。
(function () {
a = 10
var a
console.log(a) // 10
}())
(function () {
a = 10 // ReferenceError: a is not defined
let a
console.log(a)
}())
可见用var关键字声明的变量会有提升现象,let变量‘没有’提升现象。
函数优先
(function () {
co...
09 Dec 2016
JavaScript的执行模式可以分为严格模式和宽松模式,严格模式比起宽松模式:
严格模式下,JS会修复一些缺陷,减少静默错误
更容易被解释器优化,带来更高的执行速度
禁用了未来JS版本会用到的一些语法
可以参考Microsoft文档,下面我们列举一些常见的不同点
禁用隐式全局变量
(function () {
foobaz = 100
console.log(window.foobaz) // 100
}())
(function () {
'use strict'
foobaz = 100 // ReferenceError: foobaz ...