在这里,我得到了一个错误:"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);
我可能是错的,但是最好的解决方法是什么?
JavaScript具有*词法*范围,而不是动态的。你的'func2'接受一个参数'z',但它不会传递给'func',因此它没有在那里定义。您必须编写嵌套的定义,或显式传递参数。 – deceze