Codelet Keep code simple stupid

JavaScript解构赋值

解构赋值语法是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]...

JavaScript for-of循环

JavaScript中的循环语句大致可以分为:条件循环(for/while),属性枚举(for-in),Array方法 (forEach)几种,而ES6又新增了一种循环语句for-of,用于可迭代对象的循环。 迭代器实际上是一种设计模式,用于提供顺序访问容器内元素的方法,而不需要了解具体的实现。如果说之前 的JS中,迭代器只是以模式来运用的话,那么在ES6之后JS则是对迭代器提供了系统级的支持,任何JS对象 只要实现了可迭代协议,就可以通过统一的for-of方式实现迭代。 可迭代对象: 对象实现了@@iterator方法(即具有Symbol.iterator属性),则认为该对象是可迭...

JavaScript UMD模块定义

现在的前端工程已经离不开转译器和打包工具了,随着前端工程的越来越自动化,我们的开发效率的确得到了 极大的提升,但是,作为一个程序员,单单只是会使用工具是不够的。工具在帮助我们完成一些任务的同时也 屏蔽了一些重要的细节,而细节不容忽视,所以我们回过头来看看工具自动生成的代码还是很有必要的。 今天就先研究一下rollup的模块打包格式 先介绍一下工具链: babel@6.18 使用es6 rollup@0.36 命令rollup -h告诉我们bundle的输出格式可选5种,分别是:[amd, cjs, es, iife, umd],其中 umd据说可以适配所有的模块环境,那...

JavaScript变量提升

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...

JavaScript严格模式

JavaScript的执行模式可以分为严格模式和宽松模式,严格模式比起宽松模式: 严格模式下,JS会修复一些缺陷,减少静默错误 更容易被解释器优化,带来更高的执行速度 禁用了未来JS版本会用到的一些语法 可以参考Microsoft文档,下面我们列举一些常见的不同点 禁用隐式全局变量 (function () { foobaz = 100 console.log(window.foobaz) // 100 }()) (function () { 'use strict' foobaz = 100 // ReferenceError: foobaz ...