概念:有权访问另一个函数作用域内变量的函数都是闭包。
例如:
function a() {
var n = 0
this.inc = function() {
n++
console.log(n)
}
}
var c = new a()
c.inc() //控制台输出1
c.inc() //控制台输出2
这里 inc 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。再来看一段代码:
function counter() {
var n = 0
function inc() {
n++
console.log(n)
}
return inc
}
var c = counter()
c() //控制台输出1
c() //控制台输出2
看看是怎么执行的:
var c = counter()
,这一句 couter()
返回的是函数 inc,那这句等同于 var c = inc; c();
,这一句等同于 inc();
注意,函数名只是一个标识(指向函数的指针),而()
才是执行函数。
后面三句翻译过来就是: var c = inc; inc(); inc();
,跟第一段代码有区别吗? 没有。
详情查看 https://www.cnblogs.com/qieguo/p/5457040.html
定义:
JSON(JavaScript Object Notation, JS 对象简谱)
是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
注意:
JSON
的Key
必须包裹在一个双引号中,在实践中,编写JSON
的时候,忘了给Key
值加双引号或者是把双引号写成单引号是常见错误。- 还需要注意的是
JSON
文件中无法使用注释,试图添加注释将会引发报错。
定义:
BSON( Binary Serialized Document Format)
是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据。
Uniform Resource Locator(统一资源定位符))统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
- 为什么需要 WebAssembly?
JavaScript 从诞生起,到现在已经变成流行的编程语言,这背后正是 Web 的发展所推动的。Web 应用变得更多更复杂,但这也渐渐暴露出了 JavaScript 的问题: * 语法太灵活导致开发大型 Web 项目困难 * 性能不能满足一些场景的需要。 WebAssembly 并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到 WebAssembly 虚拟机中才能运行,浏览器厂商需要做的就是根据 WebAssemly 规范实现虚拟机。
MVVM 是由经典的软件架构 MVC 衍生来的。当 View(视图层)发生变化时,会自动更新到 ViewModel(视图模型),反之亦然。View 和 ViewModel 之间通过双向绑定(data-binding)建立联系。 如果你使用过 jQuery,那你一定对操作 DOM,绑定事件这些 � 原生 JavaScript 能力非常熟悉,比如我们在指定 DOM 中插入一个元素,并给它绑定一个点击事件:
if (showBtn) {
var btn = $('<button>Click me</button>')
btn.on('click', function() {
console.log('clicked on btn')
})
$('#app').append(btn)
}
这段代码不难理解,操作的内容也不复杂,不过,这样让我们的视图代码和业务逻辑紧耦合在一起,随着功能增加,直接操作 DOM 会使得代码越来越难以维护。 而 Vue.js 通过 MVVM 的模式拆分为视图和数据两部分,并将其分离。因此,你只需要关心你的数据即可,DOM 的事情,Vue 会自动帮你搞定。
SPA:
全称 single page application
(单页应用)
PWA:
全称 progressive web application
(渐进式网页应用)