javascript - Kyle Simpson 的 Function-Light JavaScript 中令人困惑的变量赋值 var[key] =

标签 javascript functional-programming variable-assignment

因此,在凯尔·辛普森 (Kyle Simpson) 所著的《Functional-Light JavaScript》一书中,有一章介绍柯里化(Currying)函数,其中包含以下代码示例:

function curryProps(fn, arity = 1) {
     return (function nextCurried(prevObjsArgs) {
          return function curried(nextArgObj = {}) {
               var [key] = Objects.keys( nextArgObj) ;
               var allArgsObj = Object.assign( {}, prevArgsObj, { [key] : nextArgObj[key] } );

          if (Object.keys( allArgsObj ).length >= arity) {
               return fn( allArgsObj );
          } else {
                return nextCurried( allArgsObj );
          }
     };
 })( {} );

}

我在移动设备上输入了该内容,因此请原谅任何拼写错误,但我的问题是该函数第 4 行的关键代码是什么。他赋值的地方: var[key] = ... 我似乎找不到任何有关用方括号命名变量的信息,所以他当时完全迷失了我。我能说什么,我像编译器一样阅读代码,当我遇到一些我认为违反规则的东西时,我就会被绊倒。有人可以帮我在心里整理这段文字吗?

最佳答案

这是变量(数组)destructuring assignment :

var arr = [1,2,3]; 
var [x, y] = arr; // assigns 1 to x and 2 to y. 

在他的例子中,Object.keys 返回数组中键的数组。他只提取第一个元素:

var o = {x:3, y:6, z:4};
var [p] = Object.keys(o); // just the first key

关于javascript - Kyle Simpson 的 Function-Light JavaScript 中令人困惑的变量赋值 var[key] =,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909476/

相关文章:

javascript - SAPUI5 为可搜索输入命名模型绑定(bind)

haskell - 在 Haskell 中将 `a -> b` 类型的函数转换为 `String -> String` 类型的函数

java - 将整数文字分配给Java中的 double 变量

for循环中的Python赋值(理论澄清)

javascript - 网页上桌面和 iPad 的图像宽度和高度不同?

javascript - jQuery each 和 change 合并

ruby - Erlang actor 与 OOP 对象有何不同?

javascript - 是否有与 goog.object.extend 等效的纯函数?

r - 函数 `[<-` 将 _replace_ 一个元素,但不附加一个 _element_

javascript - 验证不同组中同名复选框是否被选中