注:本文为 《 JavaScript 完全手册(2018版) 》第36节,你可以查看该手册的完整目录。
最后,介绍一些您可能不熟悉的前端开发术语。
异步
当您启动某些内容时,代码是异步的,建议忘记它,并且当结果准备就绪时,您可以将其取回而无需等待它。 典型的例子是一个 AJAX 调用,它可能需要几秒钟,同时你完成其他的东西,当响应准备就绪时,调用回调函数。 Promise 和 async/await 是处理异步的现代方法。
块(Block)
在 JavaScript 中,块是用大括号( {}
)包裹的。 if
语句包含一个块, for
循环包含一个块。
块级作用域
使用函数作用域,在块中定义的任何变量对整个块都是可见的,可以在块内部访问,但块外部不能访问。
回调
回调是在发生某些事情时调用的函数。元素单击事件会绑定一个事件处理程序,这就是回调函数,当用户单击元素时会调用该回调函数。fetch 请求有一个回调函数,当资源被下载时调用该回调函数。
声明
声明就是告诉机器你需要做什么,然后让他计算出详细信息。 React 被认为是声明性的,因为你更注重推理抽象而不是直接编辑 DOM 。 每种高级编程语言都比汇编程序等低级编程语言更具声明性。 JavaScript 比 C 语言更具声明性,HTML是声明性的。
回退
当用户无法访问特定功能时,回退可以用于提供良好的体验。例如,禁用 JavaScript 的用户应该能够返回到页面的纯 HTML 版本。或者对于没有实现 API 的浏览器,您应该有一个回退,以避免完全破坏用户的体验。
函数作用域
在函数作用域中,函数中定义的任何变量都是可见的,并且可以在整个函数内部访问。
不可变性(Immutability)
当一个变量的值在创建后无法更改时,该变量就被认为是不可变的。可变变量可以改变的。这同样适用于对象和数组。
词法作用域
词法作用域是一个特定作用域,父函数的变量可以被内部函数访问。内部函数的作用域也包括了父函数的作用域。
Polyfill
polyfill 是一种为现有 JavaScript 提供新功能,或为旧版浏览器提供现代浏览器 API 的方法。 polyfill 是一种特殊的 shim 。
如果你还有迷惑,可以查看 JavaScript术语:shim 和 polyfill 了解更多细节。
纯函数(pure function)
一个没有副作用(side effects)的函数(不会修改外部资源),其输出仅由参数决定。您可以调用此函数 1M 次,并且给定相同的参数集,输出将始终相同。
重新赋值
JavaScript 中,使用 var
和 let
声明的变量允许您无数次地重新赋值。 使用 const
声明,您可以有效地为字符串,整数,布尔值和对象声明一个不可变值(对于对象值来说,你无法重新分配,但您仍然可以通过其方法对其进行修改)。
作用域
作用域是一个变量集合,该变量集合对于程序来说是可见的那一部分。
Scoping
Scoping 编程语言里定义的一组规则,用于确定变量的值。
Shim
Shim 包含了许多功能或者 API。它通常用于抽象内容,预填充参数或为不支持某些功能的浏览器添加 polyfill。你可以把它看作兼容层。
如果你还有迷惑,可以查看 JavaScript术语:shim 和 polyfill 了解更多细节。
副作用(side effects)
副作用是当一个函数与它之外的某个其他函数或对象进行交互。与网络或文件系统或UI的交互都是副作用。
state(状态)
在讨论组件时,state(状态) 通常会发挥作用。如果组件管理自己的数据,则组件可以是 stateful(有状态的),如果组件不管理自己的数据,则可以是 stateless(无状态) 组件。
有状态的(stateful)
一个有状态的组件,函数或类管理其自己的状态(数据)。它可以存储数组,计数器或其他任何东西。
无状态的(stateless)
一个无状态的组件,函数或者类也被称作 dumb ,因为它无法使用自己的数据做出决定,所以它的输出或者展示完成基于它的参数。这意味着纯函数无状态的。
严格模式(Strict mode)
严格模式是 ECMAScipt 5.1 的新功能,它会导致 JavaScript 运行时捕捉更多的错误,但是它可以通过拒绝未声明的变量和冲突的对象属性等其他容易被忽视的问题来帮助你改进 JavaScript 代码。建议:使用严格模式。另一个“草率模式(sloppy mode)”看名字就知道不是什么好事情。
Tree Shaking
Tree Shaking 意味着从你发送给用户的包中删除“死代码”。如果你在 import
语句中添加了一些从未使用过的代码,这些代码就不会被发送给你的用户,从而减少文件大小和加载时间。
关于 Tree Shaking 的实现和原理请查看 webpack 2中的Tree Shaking
感谢阅读!
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂