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

最失败的 JavaScript 面试问题

尽管 setTimeout 函数有零延迟,回调函数是异步调用的。引擎会将回调函数放在回调队列(宏任务队列)中,并在调用栈为空时将其移至调用栈。...它们也没有原型属性: TypeError:无法设置undefined的属性(设置'getNum') 这样的问题比较少见,但你应该为它们做好准备。你可以在 MDN 上查看更多关于箭头函数的信息。...要轻松记住一种编程语言是如何工作的,了解为什么它是这样工作的会很有帮助(简单吧!)。 这种行为是因为 const 变量而被选中的。访问未定义的 var 变量时,我们得到的是undefined。...解释: 在命名函数表达式中,名称只在函数体内部是局部的,外部无法访问。因此,全局作用域中不存在foo。 typeof运算符对未定义的变量返回undefined。...因为 catch 处理程序返回了一个 promise,所以下一个 then 处理程序被调用,并返回一个值为 2 的 promise。 最后一个 then 处理程序被调用,并打印2。

17920

「硬核JS」图解Promise迷惑行为|运行机制补充

一旦 执行栈 中的所有同步任务执行完毕,就会读取 任务队列,将可运行的异步任务(任务队列中的事件回调,只要任务队列中有事件回调,就说明可以执行)添加到执行栈中,开始执行。...属性保存 Promise 对象执行成功的结果,失败原因使用 reason 属性保存,这些命名完全贴合 Promises/A+标准。...同时将成功结果和失败原因都保存到对应的属性上。 然后将 state 属性置为更新后的状态。 then 方法基础实现 接着我们来简单实现 then 方法。...)」 「如果then方法中返回了一个 Promise 对象,那就以这个对象为准,返回它的结果」 嗯,到此我们需求已经明确,开始代码实现。...对象,状态永远为等待态(pending),再也无法成为 resolved 或是 rejected,程序就死掉了,因此要先处理它。

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【JS】2030- 通过可视化彻底搞懂 Promise执行逻辑

    深入探讨了 JavaScript 中 Promise 的内部机制,解释了它们如何使异步任务以非阻塞方式执行,并展示了 Promise 的创建、状态变化以及与事件循环的关系。...但是,使用函数来改变对象内部属性有什么特别的呢?...此 Promise Reaction 包含一个 [[Handler]] 属性,其中包含我们传递给它的回调。...异步任务在主线程之外执行,例如读取文件(如 fs.readFile)、提出网络请求(如 https.get 或 XMLHttpRequest),或者像定时器(setTimeout)这样简单的任务。...由于我们没有显式地返回一个值,所以最后一个 then promise 的 [[PromiseResult]] 是未定义的,这意味着它隐式地返回了未定义的值。 当然,使用数字并不是最现实的场景。

    24210

    2021年大数据Flink(四十六):扩展阅读 异步IO

    流计算系统中经常需要与外部系统进行交互,我们通常的做法如向数据库发送用户a的查询请求,然后等待结果返回,在这之前,我们的程序无法发送用户b的查询请求。...,哪个请求的回复先返回了就处理哪个回复,从而连续的请求之间不需要阻塞等待,这也正是Async I/O的实现原理。...如下图所示,尽管P4的结果先返回,但并不会发送,只有 P1 (队首)的结果返回了才会触发 Emitter 拉取队首元素进行发送。...所有新进入该算子的元素,同样的包装成 Promise 并放入 uncompletedQueue 队列,当uncompletedQueue队列中任意的Promise返回了数据,则将该 Promise 移到...只有处在队首的集合中的 Promise 返回了数据,才能将该 Promise 移到completedQueue  队列中,由 Emitter 消费发往下游。 只有队首集合空了,才能处理第二个集合。

    1.4K20

    ES6的异步编程之Generator

    等到操作系统返回了 /etc/passwd 这个文件以后,回调函数才会执行。...原因是执行分成两段,在这两段之间抛出的错误,程序无法捕捉,只能当作参数,传入第二段。 三、Promise 回调函数本身并没有问题,它的问题出现在多个回调函数嵌套。...代码不是纵向发展,而是横向发展,很快就会乱成一团,无法管理。这种情况就称为“回调函数噩梦”(callback hell)。 Promise就是为了解决这个问题而提出的。...它不是新的语法功能,而是一种新的写法,允许将回调函数的横向加载,改成纵向加载。采用Promise,连续读取多个文件,写法如下。...value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。

    51520

    Generator 函数的含义与用法

    等到操作系统返回了 /etc/passwd 这个文件以后,回调函数才会执行。...原因是执行分成两段,在这两段之间抛出的错误,程序无法捕捉,只能当作参数,传入第二段。 三、Promise 回调函数本身并没有问题,它的问题出现在多个回调函数嵌套。...代码不是纵向发展,而是横向发展,很快就会乱成一团,无法管理。这种情况就称为"回调函数噩梦"(callback hell)。 Promise就是为了解决这个问题而提出的。...它不是新的语法功能,而是一种新的写法,允许将回调函数的横向加载,改成纵向加载。采用Promise,连续读取多个文件,写法如下。...value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。

    95160

    如何及时发现网页的隐形错误

    ReferenceError: 引用了未定义的变量或对象 TypeError: 类型错误 URIError: URI操作错误 SyntaxError: 语法错误 (这个错误WebIDL中故意省略,保留给...ES解析器使用) Error: 普通异常,通常与 throw 语句和 try/catch 语句一起使用,利用属性 name 可以声明或了解异常的类型,利用message 属性可以设置和读取异常的详细信息...} window.onerror 优点: 可以捕获同步和异步的异常 可以获取到错误的详细信息 缺点: 受到同源策略的限制,只能捕获当前域名下的错误 无法捕获语法错误和网络异常的错误 无法阻止异常继续传播...().catch(cb) 优点: 可以捕获 Promise 的拒绝(失败)状态,并执行相应的错误处理逻辑 可以很方便地处理 Promise 的成功和失败回调 缺点: 无法捕获 Promise 内部的同步异常...,只能捕获到 Promise 对象本身的异常 无法捕获到其他异步操作中的错误,例如网络请求失败等。

    23900

    2020面试题--小试牛刀

    答:1.值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。...答: 闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取[局部变量],所以闭包可以理解成“定义在一个[函数]内部的函数“。...undefined 是 Undefined 类型的唯一值,它表示未定义的值。当声明变量未赋值时,或者定义属性未设置值时,默认值都为 undefined。 *问题:promise是什么?...答:Promise是异步编程的一种解决方案 Promise对象有以下2个特点: 1.对象的状态不受外界影响。...只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

    1.1K20

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

    对于典型的迭代器和生成器,如果value属性被定义,则done属性未定义或为false。如果done为true,则value为未定义。...可以编写一个基于 Promise 的函数,其中值是同步计算的,并使用Promise.resolve()异步返回,尽管这种情况可能不太常见。...如果一个属性不可配置,你就无法改变它的可配置或可枚举属性。 如果一个访问器属性不可配置,你就无法更改其 getter 或 setter 方法,也无法将其更改为数据属性。...这意味着无法向对象添加新属性,也无法删除或配置现有属性。但是,可写的现有属性仍然可以设置。无法取消密封的对象。你可以使用Object.isSealed()来确定对象是否被密封。...类属性”,其中包含了否则无法获取的类型信息。

    24610

    javascript ES2020 已经来了

    可选链(Optional Chaining) 可选链语法允许你访问深度嵌套的对象,而不用担心属性是否存在。在处理对象时,你肯定熟悉这样的错误类型。...TypeError: Cannot read property of undefined 上述错误意味着你正试图访问一个未定义变量的属性。为了避免这样的错误,你的代码写起来得像这样。...这些环境都有自己的对象模型和不同的语法来访问它。ES2020为我们带来了globalThis属性,无论你在哪里执行代码,该属性总是引用全局对象。...Promise.allSettled() 该方法返回一个promise,该Promise在所有给定的promise被满足或拒绝后解析。它通常用于异步任务不依赖彼此成功完成的情况,如下例所示。...'John' 当左边操作数未定义或为空时,该操作符将返回右手操作数。在上面的例子中,由于student.name未定义,该操作符将把name的值设置为'John'。

    1.3K40

    Node.js 异步异闻录

    回调函数则被设置在这个对象的 oncomplete_sym 属性上。...I/O 观察者回调函数的行为就是取出请求对象的 result 属性作为参数,取出 oncomplete_sym 属性作为方法,然后调用执行,以此达到调用 JavaScript 中传入的回调函数的目的。...:一旦检测到返回了新的 Promise 对象,停止执行,然后将当前 Deferred 对象的 promise 引用改变为新的 Promise 对象,并将队列中余下的回调转交给它 ret.queue...从 Promise 链式调用可以清晰地看到队列(先进先出)的知识,其有如下两个核心步骤: 将所有的回调都存到队列中; Promise 完成时,逐个执行回调,一旦检测到返回了新的 Promise 对象,停止执行...Generator 尽管 Promise 一定程度解决了回调地狱的问题,但是对于喜欢简洁的程序员来说,一大堆的模板代码 .then(data => {...}) 显得不是很友好。

    2.3K80

    来自1000多个项目的10大JavaScript错误浅析

    在Chrome里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Chrome开发者控制台可以很容易地重现这个错误。...TypeError: ’undefined’ is not an object 在Safari里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误...TypeError: null is not an object 在Safari里读取空(null)对象的属性或调用空对象的方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误。...TypeError: Object doesn’t support property 在IE里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在IE开发者控制台可以很容易地重现这个错误。...Uncaught TypeError: Cannot set property 我们无法对undefined变量进行赋值或读取操作,否则的话会抛出“Uncaught TypeError: cannot

    6.2K80

    Promise:为什么没有取消?

    在JavaScript中,Promise是用于处理异步操作的对象,它代表一个异步操作的最终完成(或失败)及其结果值。然而,JavaScript的Promise并不提供内置的取消(cancel)机制。...Fulfilled(已完成) :表示异步操作成功完成,并返回了一个值。 Rejected(已拒绝) :表示异步操作失败,并返回了一个原因(错误)。...如果一个中间的Promise被取消,如何处理后续链式操作也是一个难题。例如,Promise.all或Promise.race的行为如何改变?...如何实现取消功能 尽管标准的Promise没有内置的取消功能,可以通过一些方法来实现类似的功能。...结语 虽然JavaScript的Promise没有内置取消功能,但这并不意味着我们无法实现取消功能。

    16310
    领券