如何实现调用add函数首次返回1第二次返回2且仅在函数内部编码?
问题原因
你原来的实现不符合要求,是因为你直接重写了整个add变量的赋值逻辑,突破了题目要求的「所有代码仅可编写在给定add函数的// start only和// end注释区间内」的限制,改动了题目给定的代码框架结构。
正确实现方案
我们可以利用函数本身也是对象,支持挂载自定义属性的特性来存储计数器,不需要额外在外层封装闭包,所有逻辑都可以写在指定的注释区间内:
var add = function () { // start only // 首次调用时初始化计数器 if (!add.counter) { add.counter = 0 } // 自增后返回,刚好第一次返回1,第二次返回2 return ++add.counter // end }; console.log(add()); // 1 console.log(add()); // 2
实现逻辑说明
- 第一次调用
add()时,add.counter为undefined,判定为假,初始化为0,自增后变成1返回 - 第二次调用
add()时,add.counter已经是1,自增后变成2返回 - 所有代码都严格限定在指定的注释区间内,没有改动题目给定的代码框架结构,完全符合要求。
内容的提问来源于stack exchange,提问作者YaTing
相关产品推荐
相关产品推荐

