在MDN上面有这么一句话:函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。而我自己的理解,闭包相对于其他形式的函数来说多了一个独立的作用域用来存储相对于全局作用域隔离的信息(最常见的就是变量),且这个独立的作用域不会像其他函数一样随着函数执行完毕而销毁。
JavaScript原型与原型链的个人理解
JavaScript原型与原型链的问题也是最近发现的知识盲区。大概意思就是JavaScript虽然有对象,但是没有类似于C++以及Java的类,JavaScript的对象实际是从各种各样的原型继承而来的,这个就是基本概念。
JavaScript中的for循环体中var与let的区别
从我使用JavaScript开始到现在基本都是在使用var方式声明变量,虽然很早就得知let方式声明变量是更优解,但是在实际练习中并没有遇到过非let不可的情况。不过最近遇到一个for循环的题目彻底颠覆了我的认知。
JavaScript异步任务(promise、async/await、settimeout)执行顺序
promise、async/await、settimeout等异步任务都已经非常熟悉,但是这三者混合起来执行的话执行顺序却是看得一头雾水。阅读本文之前应该对Promise、async/await以及异步队列中的宏任务和微任务有所了解。
async/await的一些个人理解
async/await是ES的新标准之一,主要用于异步编程,其原理跟Promise相似(对Promise不了解的可以点击这里),不过比起Promise之后用then方法来执行相关异步操作,async/await则把异步操作变得更像传统函数操作。
Promise对象中then的先后顺序
单个Promise对象的then执行顺序其实很容易理解,反正对着then的顺序排列,就能得到then方法的执行顺序。但是在多个异步任务或者说是多个Promise对象组成的代码中,就好像不是这么一回事了。
Promise对象是同步执行还是异步执行?
从MDN的文档或者是其他的Web教学的网站看到的教学,Promise对象往往和“异步”挂钩。但是Promise对象本体内的代码其实是同步执行的,只有then方法或者catch方法才是异步执行,下面通过一个简单的例子来了解。
web前端的Promise对象
“Promise对象代表了一个异步操作的最终完成(或者失败)以及这个异步操作所返回的值”,这句话翻译自MDN文档。不过看完之后还是一头雾水,特别是对于从回调地狱过来的人。
什么是回调地狱(callback hell)?
回调地狱的存在普遍是由于函数的层层嵌套,导致后续代码规模增大之后代码可读性降低,逻辑难以理清,然而回调地狱本身并不是bug或者是错误的代码。接下来将通过几个简单的例子来说明回调地狱,只需了解setTimeout方法便可继续阅读。