力扣刷题:创建hello world函数和只允许一次函数调用

170 阅读2分钟

前言:锻炼自己的思想,规范自己的编程思路。

问题1:编写helloworld函数

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

示例:(放代码里面)

输入:args = []
输出:"Hello World"
解释:
const f = createHelloWorld();
f(); // "Hello World"

思路:今天写这个题目一看写hello world,这个我拿手啊,一看问题,果然很简单,就是hello world呀,思路的话就是由题目得,就是在函数内部定义一个匿名函数,这个函数总是返回hello world。

基于上述思考,代码如下:

/**
 * @return {Function}
 */
var createHelloWorld = function() {
    return function(...args) {
        return "Hello World";
    }
};

执行结果如下图:

image-20230530224807359.png

结论:这个题目很简单,大家应该都会(手动狗头)

问题2:只允许一次函数调用

给定一个函数 fn ,它返回一个新的函数,返回的函数与原始函数完全相同,只不过它确保 fn 最多被调用一次。

第一次调用返回的函数时,它应该返回与 fn 相同的结果。 第一次后的每次调用,它应该返回 undefined 。

示例:(放代码里面)

输入:fn = (a,b,c) => (a + b + c), calls = [[1,2,3],[2,3,6]]
输出:[{"calls":1,"value":6}]
解释:
const onceFn = once(fn);
onceFn(1, 2, 3); // 6
onceFn(2, 3, 6); // undefined, fn 没有被调用

思路:看到这个题目就是函数可能会有嵌套,但是只允许一次调用,可能会有赋空值的地方。这个函数接受一个函数 fn作为参数,调用返回的新函数时,尝试调用 fn函数并传入相同的参数。然后使用finally 语句来确保 fn函数被重新赋值为一个空函数。这样,当我第一次调用返回的新函数时,调用 fn 函数并返回相同的结果。但是,在第一次调用之后,fn函数已经被重新赋值为一个空函数,再次调用返回的新函数时,将不再调用原始的 fn 函数,而是直接返回 undefined。

基于上述思考,代码如下:

/**
 * @param {Function} fn
 * @return {Function}
 */
var once = function(fn) {
    return function(...args){
        try{
            return fn(...args)
        }
        finally{
            fn=()=>{}
        }
    }
};

执行结果如下图:

image-20230530225451181.png

结论:这个题目还是有点难的,看了一些评论,思考了很久才写出来,值得记录一下。

参加六月的日更计划,加油。