💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> 1. 从`var` 到 `let/const` > 2. 从`IIFS`到`blocks` > 3. 从连接字符串到模板文字 > 4. 从函数表达式到箭头表达式 > 5. 处理多个返回值 > 6. 从`for`到`forEach()`再到`for-of` > 7. 处理参数缺省值 > 8. 处理命名参数 > 9. 从`arguments`到剩余参数 > 10. 从`apply()`到`(...)` > 11. 从`concat`到`(...)` > 12. 从对象表达式到方法定义的函数表达式 > 13. 从构造函数到类 > 14. 从自定义错误构造函数到错误的子类 > 15. 从对象到`Maps` > 16. 新的字符串方法 > 17. 新的数组方法 > 18. 从`CommonJS`模块到`ES6`模块 > 19. 接下来呢? ## 1. 从`var` 到 `let/const` 在ES5中,我们通过`var`来声明变量.这些参数都是`function-scoped`,它们的作用域是最内层的包含函数.`var`的行为偶尔也会引起困扰,例如: ```javascript var x = 3; function func(randomize) { if (randomize) { var x = Math.random(); // (A) scope: whole function return x; } return x; // accesses the x from line A } func(false); // undefined ``` `func()`返回未定义的可能是令人惊讶的。您可以看到为什么通过重写代码,以便它更紧密地反映了实际运行结果: ```javascript var x = 3; function func(randomize) { var x; if (randomize) { x = Math.random(); return x; } return x; } func(false); // undefined ```