js闭包/原型链/promise讲解
闲来无事,总结几个经典前端面试题
1.js闭包
通俗的讲其实闭包就是一个函数,一个外部函数通过调用函数并return返回出内部函数,这里的内部函数就是一个闭包;此时在内部函数中是可以访问到外部函数的变量的;
首先我们来看看闭包的特性
1.函数嵌套函数
2.函数内部可以引用函数外部的参数和变量
3.参数和变量不会被垃圾回收机制回收,所以对内存的开销更大
以下代码为例function outer() {
var a = '123' return function add(){
var b = 'abc'
console.log(a); } } var getout = outer()
getout () //"123"
上述代码中返回的函数add因为在outer函数内部,所以它可以访问到outer的所有变量,但是outer访问不到add的变量,但是如果我们吧add的值return出来外部函数outer便可以变相的访问add内部的变量,此时add就是一个简单的闭包函数;
2.前端异步改同步
如果面试官问你在前端如果需要上一个方法的返回值作为下一个方法入参,此处该怎么做?不用想,面试官肯定想考你对Promise对象的理解,
Promise对象(
有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。
Promise 也有一些缺点。首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)
)
代码示例:
var myFirstPromise = new Promise(function(resolve, reject){
setTimeout(function(){ resolve("成功!"); //代码正常执行! }, 250); });
上述代码中,setTimeout作为异步代码,实际以ajax或者axios等一些API方法作为参考,使用promise对象的优点就是,只有当异步代码执行成功promise对象会调用reslove,否则调用reject,避免层层嵌套即可把开头所讲的逻辑处理掉;
已经实例化过的 promise 对象可以调用 promise.then() 方法,传递 resolve 和 reject 方法作为回调。
promise.then() 是 promise 最为常用的方法,也可写成链式操作;
getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // proceed });
回答完上述部分基本promise对象已经讲解清楚了,详细的操作还需要在特定代码环境里边去实现;
3.js原型链
实例在调用方法时,如果在本身没有找到,就会在原型对象上查找,如果没有找到,就继续往上一级原型对象查找,一直到最上层的Object,如果在中间找到需要的方法则立即停止并返回该方法,如果一直未找到则返回未定义,这就是JS原型链;
以下引入官网的一张图例吧,弄懂了这张图就弄懂了JS原型链,很多时候面试,面试官可能会让你手绘JS原型链
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现