diff --git a/solution/2600-2699/2666.Allow One Function Call/README.md b/solution/2600-2699/2666.Allow One Function Call/README.md index 4f4a3e6c685e6..8a77a386ed1dd 100644 --- a/solution/2600-2699/2666.Allow One Function Call/README.md +++ b/solution/2600-2699/2666.Allow One Function Call/README.md @@ -70,9 +70,10 @@ onceFn(4, 6, 8); // undefined, fn 没有被调用 #### TypeScript ```ts -function once any>( - fn: T, -): (...args: Parameters) => ReturnType | undefined { +type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue }; +type OnceFn = (...args: JSONValue[]) => JSONValue | undefined; + +function once(fn: Function): OnceFn { let called = false; return function (...args) { if (!called) { @@ -91,6 +92,32 @@ function once any>( */ ``` +#### JavaScript + +```js +/** + * @param {Function} fn + * @return {Function} + */ +var once = function (fn) { + let called = false; + return function (...args) { + if (!called) { + called = true; + return fn(...args); + } + }; +}; + +/** + * let fn = (a,b,c) => (a + b + c) + * let onceFn = once(fn) + * + * onceFn(1,2,3); // 6 + * onceFn(2,3,6); // returns undefined without calling fn + */ +``` + diff --git a/solution/2600-2699/2666.Allow One Function Call/README_EN.md b/solution/2600-2699/2666.Allow One Function Call/README_EN.md index 540b24580e47f..3e6f209ca4f94 100644 --- a/solution/2600-2699/2666.Allow One Function Call/README_EN.md +++ b/solution/2600-2699/2666.Allow One Function Call/README_EN.md @@ -68,9 +68,10 @@ onceFn(4, 6, 8); // undefined, fn was not called #### TypeScript ```ts -function once any>( - fn: T, -): (...args: Parameters) => ReturnType | undefined { +type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue }; +type OnceFn = (...args: JSONValue[]) => JSONValue | undefined; + +function once(fn: Function): OnceFn { let called = false; return function (...args) { if (!called) { @@ -89,6 +90,32 @@ function once any>( */ ``` +#### JavaScript + +```js +/** + * @param {Function} fn + * @return {Function} + */ +var once = function (fn) { + let called = false; + return function (...args) { + if (!called) { + called = true; + return fn(...args); + } + }; +}; + +/** + * let fn = (a,b,c) => (a + b + c) + * let onceFn = once(fn) + * + * onceFn(1,2,3); // 6 + * onceFn(2,3,6); // returns undefined without calling fn + */ +``` + diff --git a/solution/2600-2699/2666.Allow One Function Call/Solution.js b/solution/2600-2699/2666.Allow One Function Call/Solution.js new file mode 100644 index 0000000000000..a0f9bec40a3f6 --- /dev/null +++ b/solution/2600-2699/2666.Allow One Function Call/Solution.js @@ -0,0 +1,21 @@ +/** + * @param {Function} fn + * @return {Function} + */ +var once = function (fn) { + let called = false; + return function (...args) { + if (!called) { + called = true; + return fn(...args); + } + }; +}; + +/** + * let fn = (a,b,c) => (a + b + c) + * let onceFn = once(fn) + * + * onceFn(1,2,3); // 6 + * onceFn(2,3,6); // returns undefined without calling fn + */ diff --git a/solution/2600-2699/2666.Allow One Function Call/Solution.ts b/solution/2600-2699/2666.Allow One Function Call/Solution.ts index 958ae80a932dc..af5db873190d9 100644 --- a/solution/2600-2699/2666.Allow One Function Call/Solution.ts +++ b/solution/2600-2699/2666.Allow One Function Call/Solution.ts @@ -1,6 +1,7 @@ -function once any>( - fn: T, -): (...args: Parameters) => ReturnType | undefined { +type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue }; +type OnceFn = (...args: JSONValue[]) => JSONValue | undefined; + +function once(fn: Function): OnceFn { let called = false; return function (...args) { if (!called) {