美文网首页前端面试题
+1s 程序(闭包)

+1s 程序(闭包)

作者: 千茉紫依 | 来源:发表于2019-03-27 11:46 被阅读0次

完成一个生成计数器的函数 plusFor,调用它会返回一个计数器。计数器本身也是一个函数,每次调用会返回一个字符串。

达到以下的效果:
const counter1 = plusFor('小明')
counter1() // => 为小明+1s
counter1() // => 为小明+2s
counter1() // => 为小明+3s
...

const counter2 = plusFor('李梅')
counter2() // => 为李梅+1s
counter2() // => 为李梅+2s
counter2() // => 为李梅+3s
...

注意你只需要完成 plusFor 函数,不要使用额外的全局变量。

答案:

  我的答案:
  const plusFor = (name) => {
         let P = this
         if (!P[name]) {
             P[name] = 0
         } else {
             P[name]++
         }
         let a=() => {
              P[name]++
              return `为${name}+${P[name]}s`
         }
         return a
     }

 网上最优答案:
 const plusFor = (name, count = 0) => () =>`为${name}+${++count}s`

我的思路是首先使用plusFor作为一个存储空间,使用P[name]=value的形式将所有用户的数据存储在函数本身当中,然后通过函数中可以向上查找变量的特性,在a函数中引用P对外输出。而最优答案中使用闭包特性返回一个匿名函数,使得外部可以凭借这个匿名函数做中转来引用内部的name和count。

我答案的弊端是对P的定义,以及外部对a的引用,使得plusFor和a两个函数在执行完后无法被销毁,会常驻内存老生代。而最优答案不仅代码量小,且只有
() =>为${name}+${++count}s 匿名函数会常驻老生代,在性能上亦更胜一筹。

相关文章

  • +1s 程序(闭包)

    完成一个生成计数器的函数 plusFor,调用它会返回一个计数器。计数器本身也是一个函数,每次调用会返回一个字符串...

  • 理解闭包

    闭包 何为闭包 闭包(Closure)是词法闭包(Lexical Closure)的缩写 高级程序设计中写有权访问...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • 函数储存状态

    一个取钱程序 “闭包是穷人的对象”,“对象是穷人的闭包”

  • 什么是闭包?面试必看!

    什么是闭包 什么是闭包,你可能会搜出很多答案.... 《JavaScript高级程序设计》这样描述:闭包是指有权访...

  • JS学习理解之闭包和高阶函数

    一、闭包 对于 JavaScript 程序员来说,闭包(closure)是一个难懂又必须征服的概念。闭包的形成与变...

  • 闭包的实际应用

    闭包 闭包闭包顾名思义封闭的包裹,那它到底是个啥包裹呢首先了解闭包前 我们先了解几个概念 作用域 作用域是程序运行...

  • 20.闭包、定时器

    问题 一、什么是闭包? 有什么作用? 1.什么是闭包①JavaScript高级程序设计第三版定义闭包是指有权访问另...

  • 闭包理解(个人笔记)

    闭包 闭包 是指有权访问另一个函数作用域中的变量的函数(JavaScript高级程序设计)闭包:函数A内部有函数B...

  • 简单详细讲解js闭包(看完不懂你砍我!!!)

    《javascript高级程序设计》中闭包的概念: 闭包,其实是一种语言特性,它是指的是程序设计语言中,允许将函数...

网友评论

    本文标题:+1s 程序(闭包)

    本文链接:https://www.haomeiwen.com/subject/nyoavqtx.html