x + z; const func2 = (z) =-6ren">
gpt4 book ai didi

javascript - 函数在闭包中看不到变量

转载 作者:行者123 更新时间:2023-11-30 07:54:53 25 4
gpt4 key购买 nike

这里我遇到了一个错误:"ReferenceError: z is not defined at func:

const func = (x) => x + z;
const func2 = (z) => func;
const a = func2(1);
const b = a(2);

我明白我可以这样写:

const func2 = (z) => (x) => x + z;
const a = func2(1);
const b = a(2);

但我使用 JSDoc 为每个函数添加文档注释,这种方式对我来说看起来更好:

/**
* @param {string|number} x
* @returns {string}
*/
const func = (x) => x + z;
/**
* @param {number} z
* @returns {Function}
*/
const func2 = (z) => func;
const a = func2(1);
const b = a(2);

代替:

/**
* @param {number} z
* @returns {Function}
*/
const func2 = (z) => {
/**
* @param {string|number} x
* @returns {string}
*/
return (x) => x + z;
};
const a = func2(1);
const b = a(2);

我可能是错的,但解决我的问题的最佳方法是什么?

最佳答案

你得到这个错误是因为

const func = (x) => x + z;

尝试使用 z,这不在它的范围内。

func 仍然需要在 func2 中定义,因此它可以访问 z。您可以使用详细形式,这样您就可以创建 const 并将文档注释与其相关联:

/**
* @param {number} z
* @returns {Function}
*/
const func2 = (z) => {
/**
* @param {string|number} x
* @returns {string}
*/
const func = (x) => x + z;
return func;
};
const a = func2(1);
const b = a(2);

...尽管 JSDoc 可能甚至足够聪明,可以以简洁的形式提取它们:

/**
* @param {number} z
* @returns {Function}
*/
const func2 = (z) =>
/**
* @param {string|number} x
* @returns {string}
*/
(x) => x + z
;
const a = func2(1);
const b = a(2);

关于javascript - 函数在闭包中看不到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42630423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com