首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dan Abramov脑中JS知识图谱

多年来,形成了一个关于JavaScript心智模型,给了我信心。在这里,分享一个非常压缩版本。结构像一个词汇表,每个主题都有几句话。...这个概念并不基本,但却是一个常见错误来源。你可以学习工作原理未雨绸缪,很多人都尽量避免。 字面量。字面量是指你通过在程序中写下一个值来引用它。...你很少会与这种机制直接互动,但它解释为什么我们冰激凌对象有一个我们从未定义toString方法——来自原型函数一个函数一个特殊值,有一个目的:代表你程序中一些代码。...给了我一个特殊值(一个函数),代表我们这段代码,所以如果我们想的话,以后可以调用它函数声明。...例如,setTimeout接收一个函数,然后......在超时后回你。函数并没有什么特别之处。它们是普通函数当我们说 "回 ",我们只是在谈论我们期望。

1.8K73

【JS】974- JavaScript 中哪一种循环最快呢?

答案其实是: for(倒序) 最让感到惊讶事情是,当我在本地计算机上进行测试之后,不得不接受 for(倒序)是所有 for 循环中最快这一事实。...而 forEach 是 Array 原型一个方法,与普通 for 循环相比,forEach 和 for…of 需要花费更多时间进行数组迭代。...(译者注:值得注意是,for…of 和 forEach 都从对象中获取了数据,而原型并没有,因此没有可比性。) 循环类型,以及我们应该在何处使用它们 1....2. forEach 这个方法需要接受一个函数作为输入参数,遍历数组一个元素,并执行我们函数(以元素本身和它索引(可选参数)作为参数赋予给回函数)。...forEach 还允许在回函数中使用一个可选参数 this。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript 权威指南第七版(GPT 重译)(五)

checkForUpdates()是你程序可能定义函数,setTimeout()是你调用以注册回函数并指定在何种异步条件下调用它函数。...相反,调用者传递一个函数,当结果准备就绪或发生错误时调用。在这种情况下,调用者提供一个期望两个参数函数。...现在我们已经检查 Promise 链,我们可以回到错误处理并更详细地讨论。在讨论之前,想强调是,在进行异步编程,仔细处理错误非常重要。...catch() 回可以抛出新错误如果正常返回,那么返回值将用于解析和/或实现相关 Promise,并且错误将停止传播。...这里描述大多数其他知名 Symbols 用作原型对象方法名称。) 当我们使用extends创建一个子类,结果子类构造函数会继承自超类构造函数属性。

16910

JavaScript 中哪一种循环最快呢?

答案其实是:for(倒序) 最让感到惊讶事情是,当我在本地计算机上进行测试之后,不得不接受 for(倒序)是所有 for 循环中最快这一事实。...这个细微差别不是很重要,你可以忽略。 而 forEach 是 Array 原型一个方法,与普通 for 循环相比,forEach 和 for…of 需要花费更多时间进行数组迭代。...(译者注:值得注意是,for…of 和 forEach 都从对象中获取了数据,而原型并没有,因此没有可比性。) 循环类型,以及我们应该在何处使用它们 1....2. forEach 这个方法需要接受一个函数作为输入参数,遍历数组一个元素,并执行我们函数(以元素本身和它索引(可选参数)作为参数赋予给回函数)。...forEach 还允许在回函数中使用一个可选参数 this。

1K20

JavaScript 中哪一种循环最快呢?

答案其实是:for(倒序) 最让感到惊讶事情是,当我在本地计算机上进行测试之后,不得不接受 for(倒序)是所有 for 循环中最快这一事实。...这个细微差别不是很重要,你可以忽略。 而 forEach 是 Array 原型一个方法,与普通 for 循环相比,forEach 和 for…of 需要花费更多时间进行数组迭代。...(译者注:值得注意是,for…of 和 forEach 都从对象中获取了数据,而原型并没有,因此没有可比性。) 循环类型,以及我们应该在何处使用它们 1....2. forEach 这个方法需要接受一个函数作为输入参数,遍历数组一个元素,并执行我们函数(以元素本身和它索引(可选参数)作为参数赋予给回函数)。...forEach 还允许在回函数中使用一个可选参数 this。

1.1K40

一劳永逸地搞懂 JavaScript中‘this’

; console.log(this.variable); // “一个全局变量!” 在这里,当我们声明变量,它被附加到 window 对象上。...当一个函数定义为对象方法,this 将引用拥有该方法对象。...并坚持使用它原始 this。 所以,箭头还是不箭头? 箭头函数就像你拥有的那个最喜欢工具 —— 超级有用,但不适合每一项工作。当你想保持 this不变,尤其是在回中,它们是非常有价值。...与“this”有关常见失误:要注意什么 我们认为我们已经掌握时候,给了我一个曲线球。这就像试图抓住一个滑溜鱼;一旦你失去焦点,它就消失。...我们忘记了‘new’ console.log(window.name); // 输出:Buddy 事件监听器和回:当你在事件监听器或回函数中使用this,确保你知道引用是什么。

10210

针对高级前端8个级JavaScript面试问题

构造函数用于在 JavaScript 中创建对象。当您定义一个构造函数,还可以将属性和方法附加到其 prototype 属性上。这些属性和方法然后变得可以被该构造函数创建所有对象实例访问。...每个这样对象都有一个原型,该原型作为对另一个对象引用。__proto__ 属性简单地是对这个原型对象引用。 当你试图访问对象上一个属性或方法,JavaScript 会进行查找过程来找到。...} var a = 5; bar(); 代码定义两个函数 foo() 和 bar(),以及一个值为5变量 a。...当我定义foo函数,它被赋予访问自己局部作用域和全局作用域权限。这一特性在我们无论在哪里调用foo函数都是一致,无论是在bar函数内部还是在其他模块中运行。...强烈建议你查看我关于强制转换详细博客文章。它以清晰和彻底方式解释这个概念。这里是链接。

19130

针对高级前端8个级JavaScript面试问题

构造函数用于在 JavaScript 中创建对象。当您定义一个构造函数,还可以将属性和方法附加到其 prototype 属性上。这些属性和方法然后变得可以被该构造函数创建所有对象实例访问。...每个这样对象都有一个原型,该原型作为对另一个对象引用。__proto__ 属性简单地是对这个原型对象引用。 当你试图访问对象上一个属性或方法,JavaScript 会进行查找过程来找到。...} var a = 5; bar(); 代码定义两个函数 foo() 和 bar(),以及一个值为5变量 a。...当我定义foo函数,它被赋予访问自己局部作用域和全局作用域权限。这一特性在我们无论在哪里调用foo函数都是一致,无论是在bar函数内部还是在其他模块中运行。...强烈建议你查看我关于强制转换详细博客文章。它以清晰和彻底方式解释这个概念。这里是链接。

16310

8个问题看你是否真的懂 JS

JS有一些概念,人们往往会对掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行晦涩领域之一。正如我们所知,无知是一件危险事情,它可能会导致错误。 ?...当我们说“浏览器是 JS 家”真正意思是浏览器提供运行时环境来执行我们JS代码。 浏览器主要组件包括调用堆栈,事件循环,任务队列和Web API。...事实并非如此,我们可以有多个任务队列。由浏览器选择其中一个队列并在该队列中处理回。 在底层来看,JavaScript中有宏任务和微任务。...错误 解析:展开语法 和 for-of 语句遍历iterable对象定义要遍历数据。...在Mozilla文档中,如果一个对象实现@@iterator方法,那么它就是可迭代,这意味着这个对象(或者原型链上一个对象)必须有一个带有@@iterator键属性,这个键可以通过常量Symbol.iterator

1.3K30

8个问题看你是否真的懂 JS

JS有一些概念,人们往往会对掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行晦涩领域之一。正如我们所知,无知是一件危险事情,它可能会导致错误。...当我们说“浏览器是 JS 家”真正意思是浏览器提供运行时环境来执行我们JS代码。 浏览器主要组件包括调用堆栈,事件循环*,任务队列和Web API*。...问题5 : 不会响应 解析: 大多数时候,开发人员假设在事件循环图中只有一个任务队列。事实并非如此,我们可以有多个任务队列。由浏览器选择其中一个队列并在该队列中处理回。...---- 问题6 : 会导致TypeError错误 解析: 展开语法 和 for-of 语句遍历 iterable对象定义要遍历数据。 Array 或 Map 是具有默认迭代行为内置迭代器。...在Mozilla文档中,如果一个对象实现 @@iterator方法,那么它就是可迭代,这意味着这个对象(或者原型链上一个对象)必须有一个带有 @@iterator键属性,这个键可以通过常量 Symbol.iterator

1.3K10

分享 8 个关于高级前端 JavaScript 面试题

构造函数用于在 JavaScript 中创建对象。定义构造函数,还可以将属性和方法附加到其原型属性。 然后,从该构造函数创建对象所有实例都可以访问这些属性和方法。...这些对象中一个都有一个原型,用作对另一个对象引用。__proto__ 属性只是对此原型对象引用。当原始对象不具备属性和方法原型对象用作属性和方法后备源。...默认情况下,当您创建对象,其原型设置为 Object.prototype。 当您尝试访问对象属性或方法,JavaScript 会遵循查找过程来查找。...当我定义 foo 函数,它被授予访问其自己本地作用域和全局作用域权限。无论我们在哪里调用 foo 函数,无论是在 bar 函数内部还是将其导出到另一个模块并在那里运行,这个特征都保持一致。...当回执行时,它们都会看到 i 最终值,即 4,并尝试访问未定义 arr[4]。

44430

由浅入深,66条JavaScript面试知识点

,如果创建一个对象,更改原型,constructor就会变得不可靠了 function Fn(){}; Fn.prototype=new Array(); var f=new Fn();...(2)第二种方式是使用借用构造函数方式,这种方式是通过在子类型函数中调用超类型构造函数来实现,这一种方法解决不能向超类型传递参数缺点,但是存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...当我们访问一个对象属性,如果这个对象内部不存在这个属性,那么它就会去原型对象里找这个属性,这个原型对象又 会有自己原型,于是就这样一直找下去,也就是原型概念。...说实话,看第一遍,是不理解需要去理一遍原型原型知识才能理解。所以我觉得MDN对new解释更容易理解: new 运算符创建一个用户定义对象类型实例或具有构造函数内置对象实例。...,整体上是按照由浅入深顺序来,小部分内容并非原创,相关参考都有在每条末尾贴了链接,在这里要特别感谢各路大佬博客,给了我很多帮助~ 前端是个大杂烩,各种框架层出不穷,万变不离JS,务实基础才是根本

98321

由浅入深,66条JavaScript面试知识点

,如果创建一个对象,更改原型,constructor就会变得不可靠了 function Fn(){}; Fn.prototype=new Array(); var f=new Fn();...(2)第二种方式是使用借用构造函数方式,这种方式是通过在子类型函数中调用超类型构造函数来实现,这一种方法解决不能向超类型传递参数缺点,但是存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...当我们访问一个对象属性,如果这个对象内部不存在这个属性,那么它就会去原型对象里找这个属性,这个原型对象又 会有自己原型,于是就这样一直找下去,也就是原型概念。...说实话,看第一遍,是不理解需要去理一遍原型原型知识才能理解。所以我觉得MDN对new解释更容易理解: new 运算符创建一个用户定义对象类型实例或具有构造函数内置对象实例。...,整体上是按照由浅入深顺序来,小部分内容并非原创,相关参考都有在每条末尾贴了链接,在这里要特别感谢各路大佬博客,给了我很多帮助~ 前端是个大杂烩,各种框架层出不穷,万变不离JS,务实基础才是根本

1.1K20

分享63个最常见前端面试题及其答案

03、解释原型继承如何工作 原型继承允许一个对象通过建立原型链来继承另一个对象属性。 04、null、未定义或未声明变量之间有什么区别?...重置使您可以完全控制样式,需要重新设置每个元素样式。 规范化提供更一致基础,但可能需要额外定义才能满足您设计要求。...匿名函数,也称为函数表达式,是在没有指定名称情况下定义函数。它们通常用于需要一个函数作为另一个函数参数情况或创建自调用函数。...在事件循环每次迭代期间,首先处理所有微任务(例如 Promise 和排队回),然后再继续处理下一个宏任务。 这确保微任务具有更高优先级,并在下一次渲染或 I/O 操作之前执行。...虽然本文提供一般性高级指南,深入研究底层低级材料细节至关重要。 为了全面了解,强烈建议使用 frontendlead.com。该平台提供广泛面试问题以及高质量解决方案,包括详细视频。

4.2K20

分享 63 道最常见前端面试及其答案

03、解释原型继承如何工作 原型继承允许一个对象通过建立原型链来继承另一个对象属性。 04、null、未定义或未声明变量之间有什么区别?...重置使您可以完全控制样式,需要重新设置每个元素样式。 规范化提供更一致基础,但可能需要额外定义才能满足您设计要求。...匿名函数,也称为函数表达式,是在没有指定名称情况下定义函数。它们通常用于需要一个函数作为另一个函数参数情况或创建自调用函数。...在事件循环每次迭代期间,首先处理所有微任务(例如 Promise 和排队回),然后再继续处理下一个宏任务。 这确保微任务具有更高优先级,并在下一次渲染或 I/O 操作之前执行。...虽然本文提供一般性高级指南,深入研究底层低级材料细节至关重要。 为了全面了解,强烈建议使用 frontendlead.com。该平台提供广泛面试问题以及高质量解决方案,包括详细视频。

17630

使用 Swift 实现 Promise

诚然,一个 promise 是这样东西:关联着一个定义类型,并能在被解决,将一个此类型 value 保留住。...(value) callback = nil } } 我们定义一个实例变量callback,以在 promise 处于.pending状态保留回。...如我们之前所见,我们存储第一次then当我们第二次调用then,promise 还是没有被解决,依然处于.pending状态,于是,我们将回擦除换成了新。...只有第二个回会在将来被执行,第一个被忘记了。这使得测试虽然通过,只有一个断言而不是两个。 解决办法也很简单,就是存储一个数组,并在promise被解决触发它们。 让我们更新一下。...就如给Optional和Array定义flatMap一样,我们也可以给Promise定义。 困难来了。让我们一步步看看这个“flatMap”then要怎么实现。

1.2K20

70个JavaScript面试问题

var关键字创建一个全局变量,当我们 push 一个函数,这里返回全局变量i。...因此,当我们在循环后在该数组中调用其中一个函数,它会打印5,因为我们得到i的当前值为5,我们可以访问,因为它是全局变量。 因为闭包在创建变量时会保留该变量引用而不是其值。...复制这个封闭词法作用域中this值,在这个例子中,this值在getName内部函数之外,也就是myFavoriteObj对象。 25. 对象 prototype(原型) 是什么?...因此,当我们单击li元素,它将打印5,因为这是稍后在回函数中引用它i值。...什么是回函数? 回函数是一段可执行代码段,作为一个参数传递给其他代码,其作用是在需要时候方便调用这段(回函数)代码。

1.4K10

由浅入深,66条JavaScript面试知识点

,如果创建一个对象,更改原型,constructor就会变得不可靠了 function Fn(){}; Fn.prototype=new Array(); var f=new Fn();...(2)第二种方式是使用借用构造函数方式,这种方式是通过在子类型函数中调用超类型构造函数来实现,这一种方法解决不能向超类型传递参数缺点,但是存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...当我们访问一个对象属性,如果这个对象内部不存在这个属性,那么它就会去原型对象里找这个属性,这个原型对象又 会有自己原型,于是就这样一直找下去,也就是原型概念。...说实话,看第一遍,是不理解需要去理一遍原型原型知识才能理解。所以我觉得MDN对new解释更容易理解: new 运算符创建一个用户定义对象类型实例或具有构造函数内置对象实例。...什么是回函数?回函数有什么缺点 回函数是一段可执行代码段,作为一个参数传递给其他代码,其作用是在需要时候方便调用这段(回函数)代码。

66050

由浅入深,66条JavaScript面试知识点

在最近面试中一直在总结,每次面试回来也都会复盘,面有七八家,也有那么几个offer,终究不是很满意,总想再试试大一点平台。下面是这几天遇到面试知识点。...,如果创建一个对象,更改原型,constructor就会变得不可靠了 function Fn(){}; Fn.prototype=new Array(); var f=new Fn();...(2)第二种方式是使用借用构造函数方式,这种方式是通过在子类型函数中调用超类型构造函数来实现,这一种方法解决不能向超类型传递参数缺点,但是存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...当我们访问一个对象属性,如果这个对象内部不存在这个属性,那么它就会去原型对象里找这个属性,这个原型对象又 会有自己原型,于是就这样一直找下去,也就是原型概念。...说实话,看第一遍,是不理解需要去理一遍原型原型知识才能理解。所以我觉得MDN对new解释更容易理解: new 运算符创建一个用户定义对象类型实例或具有构造函数内置对象实例。

1.1K40

利用这 66 条 JS 知识抓住年底最后一次跳槽涨薪机会

,如果创建一个对象,更改原型,constructor就会变得不可靠了 复制代码 function Fn(){}; Fn.prototype=new Array(); var f=new...(2)第二种方式是使用借用构造函数方式,这种方式是通过在子类型函数中调用超类型构造函数来实现,这一种方法解决不能向超类型传递参数缺点,但是存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...当我们访问一个对象属性,如果这个对象内部不存在这个属性,那么它就会去原型对象里找这个属性,这个原型对象又 会有自己原型,于是就这样一直找下去,也就是原型概念。...说实话,看第一遍,是不理解需要去理一遍原型原型知识才能理解。所以我觉得MDN对new解释更容易理解: new 运算符创建一个用户定义对象类型实例或具有构造函数内置对象实例。...什么是回函数?回函数有什么缺点 回函数是一段可执行代码段,作为一个参数传递给其他代码,其作用是在需要时候方便调用这段(回函数)代码。

65820
领券