Leetcode--30 天 JavaScript 挑战
Skyen Lv4

闭包专题

2667. 创建 Hello World 函数

请你编写一个名为 createHelloWorld 的函数。它应该返回一个新的函数,该函数总是返回 “Hello World”。

示例 1:
输入:args = []
输出:”Hello World”
解释:
const f = createHelloWorld();
f(); // “Hello World”
createHelloWorld 返回的函数应始终返回 “Hello World”。

示例 2:
输入:args = [{},null,42]
输出:”Hello World”
解释:
const f = createHelloWorld();
f({}, null, 42); // “Hello World”
可以传递任何参数给函数,但它应始终返回 “Hello World”。

提示:
0 <= args.length <= 10

Solution

1
2
3
4
5
6
7
8
/**
* @return {Function}
*/
var createHelloWorld = function() {
return function () {
return "Hello World";
}
};

2620. 计数器

请你编写并返回一个 计数器 函数,它接收一个整型参数 n 。这个 计数器 函数最初返回 n,每次调用它时返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。

示例 1:
输入:
n = 10
[“call”,”call”,”call”]
输出:[10,11,12]
解释:
counter() = 10 // 第一次调用 counter(),返回 n。
counter() = 11 // 返回上次调用的值加 1。
counter() = 12 // 返回上次调用的值加 1。

示例 2:
输入:
n = -2
[“call”,”call”,”call”,”call”,”call”]
输出:[-2,-1,0,1,2]
解释:counter() 最初返回 -2。然后在每个后续调用后增加 1。

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number} n
* @return {Function} counter
*/
var createCounter = function(n) {
return function() {
return n++;
};
};

/**
* const counter = createCounter(10)
* counter() // 10
* counter() // 11
* counter() // 12
*/

2704. 相等还是不相等

请你编写一个名为 expect 的函数,用于帮助开发人员测试他们的代码。它应该接受任何值 val 并返回一个包含以下两个函数的对象。

toBe(val) 接受另一个值并在两个值相等( === )时返回 true 。如果它们不相等,则应抛出错误 “Not Equal” 。
notToBe(val) 接受另一个值并在两个值不相等( !== )时返回 true 。如果它们相等,则应抛出错误 “Equal” 。

示例 1:
输入:func = () => expect(5).toBe(5)
输出:{“value”: true}
解释:5 === 5 因此该表达式返回 true。

示例 2:
输入:func = () => expect(5).toBe(null)
输出:{“error”: “Not Equal”}
解释:5 !== null 因此抛出错误 “Not Equal”.

示例 3:
输入:func = () => expect(5).notToBe(null)
输出:{“value”: true}
解释:5 !== null 因此该表达式返回 true.

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {string} val
* @return {Object}
*/
var expect = function(val) {
return{
toBe: function(a){
if(val === a) return true;
else throw new Error ("Not Equal")
},
notToBe: function(b){
if(val !== b) return true;
else throw new Error ("Equal")
}
}
};

/**
* expect(5).toBe(5); // true
* expect(5).notToBe(5); // throws "Equal"
*/

2665. 计数器 II

请你写一个函数 createCounter. 这个函数接收一个初始的整数值 init 并返回一个包含三个函数的对象。

这三个函数是:
increment() 将当前值加 1 并返回。
decrement() 将当前值减 1 并返回。
reset() 将当前值设置为 init 并返回。

示例 1:
输入:init = 5, calls = [“increment”,”reset”,”decrement”]
输出:[6,5,4]
解释:
const counter = createCounter(5);
counter.increment(); // 6
counter.reset(); // 5
counter.decrement(); // 4

示例 2:
输入:init = 0, calls = [“increment”,”increment”,”decrement”,”reset”,”reset”]
输出:[1,2,1,0,0]
解释:
const counter = createCounter(0);
counter.increment(); // 1
counter.increment(); // 2
counter.decrement(); // 1
counter.reset(); // 0
counter.reset(); // 0

提示:
-1000 <= init <= 1000
总调用次数不会超过 1000

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* @param {integer} init
* @return { increment: Function, decrement: Function, reset: Function }
*/
var createCounter = function(init) {
return{
val: init,
increment: function increment(){
return ++init;
},
reset: function reset(){
return (init = this.val);
},
decrement: function decrement(){
return --init;
},
}
};

/**
* const counter = createCounter(5)
* counter.increment(); // 6
* counter.reset(); // 5
* counter.decrement(); // 4
*/