加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

这7道关于闭包的面试题

发布时间:2021-04-06 14:49:41 所属栏目:评论 来源:互联网
导读:输出为:0 用参数 0 调用 immediateA,因此 a 参数为 0。 immediateB 函数嵌套在 immediateA 函数中,是一个闭包,它从外部 immediateA作用域中得到 a 变量,其中 a 为 0。因此 console.log(a) 的输出为 0。 3. 谁是谁 下面的代码将会输出什么内容?案: 输出
  • 输出为:0
  • 用参数 0 调用 immediateA,因此 a 参数为 0。
  • immediateB 函数嵌套在 immediateA 函数中,是一个闭包,它从外部 immediateA作用域中得到 a 变量,其中 a 为 0。因此 console.log(a) 的输出为 0。

3. 谁是谁

下面的代码将会输出什么内容?案:

  • 输出 1 和 0
  • 第一个语句 let count = 0 声明了一个变量 count。
  • immediate() 是一个闭包,它从外部作用域得到 count 变量。在 immediate() 函数作用域内, count 是 0。

但是,在条件内,另一个 let count = 1 声明了局部变量 count,该变量覆盖了作用域之外的 count。第一个 console.log(count) 输出 1。

第二个 console.log(count) 输出为 0 ,因为这里的 count 变量是从外部作用域访问的。

4. 棘手的闭包案输出:

  • 3, 3, 3。
  • 代码分为两个阶段执行。

阶段1:

  • for() 重复 3 次。在每次循环都会创建一个新函数 log(),该函数将捕获变量 i。setTimout() 安排log() 在 1000 毫秒后执行。
  • 当 for() 循环完成时,变量 i 的值为 3。

阶段2:

第二阶段发生在 1000ms 之后:

  • setTimeout() 执行预定的 log() 函数。log() 读取变量 i 当前的值 3,并输出 3
  • 所以输出 3, 3, 3。

5. 错误的信息

下面的代码将会输出什答案:

输出:'Count is 0'

  • increment() 函数被调用 3 次,将 count 增加到 3。
  • message 变量存在于 createIncrement() 函数的作用域内。其初始值为 'Count is 0'。但即使 count 变量已经增加了几次,message 变量的值也始终为 'Count is 0'。
  • log() 函数是一个闭包,它从 createIncrement() 作用域中获取 message 变量。console.log(message) 输出录'Count is 0'到控制台。

6. 重新封装

下面的函数 createStack() 用于创建栈结构:

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读