A.c*_*com 5 javascript function
在 eloquent JavaScript 中,作者提供了以下示例+散文:
\n\n\n\n\n只需稍加改动,我们就可以将前面的示例转变为创建乘以任意数量的函数的方法。
\n
function multiplier(factor) { \n return function(number) {\n return number * factor; \n }; \n}\n\nvar twice = multiplier(2); \nconsole.log(twice(5)); \n\n// \xe2\x86\x92 10 The explicit\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n不需要wrappValue 示例中的\xe2\x80\x99 中的localVariable,因为\n 参数本身就是一个局部变量。
\n\n思考这样的程序需要一些练习。一个好的心理模型是将 function 关键字视为 \xe2\x80\x9c 冻结\xe2\x80\x9d 其主体中的代码,并将其包装到一个包(函数值)中。因此,当您阅读 return function(...) {...} 时,请将其视为将句柄返回到一段计算,并冻结以供以后使用。
\n\n在示例中,乘法器返回一个冻结的代码块,该代码块存储在两次变量中。然后,最后一行调用此变量中的值,从而激活冻结的代码(返回数字*因子;)。它仍然可以从创建它的乘法器调用中访问因子变量,此外,它还可以通过其数字参数访问解冻它时传递的参数 5。
\n
javascript 如何知道以下内容中的 5:
\n\nconsole.log(twice(5));\nRun Code Online (Sandbox Code Playgroud)\n\n应该是 number 的值?JavaScript 本质上是在对自己说“我已经有 2 作为因子的值,并且我无法更改它,所以 5 必须是数字的值”。
\n\n换句话说
\n\nvar twice = multiplier(2)\n\nso twice = multiplier(2) {return function (number)}\n\nthus twice(5) = multiplier(2) {return function (5)}\nRun Code Online (Sandbox Code Playgroud)\n\n这是正确的吗?
\n\n如果乘法器内还有另一个局部变量,我可以调用:
\n\ntwice(5,10)\nRun Code Online (Sandbox Code Playgroud)\n\njavascript 会知道这意味着:
\n\nfactor = 2\nnumber = 5\nthird variable = 10\nRun Code Online (Sandbox Code Playgroud)\n
可以这样想:
var twice = function(number) {
return number * 2;
};
Run Code Online (Sandbox Code Playgroud)
当您调用 multiplier(2) 时,您正在创建一个新函数,该函数将因子嵌入到该新函数中。