令人困惑的功能轻松JavaScript中的变量赋值由Kyle Simpson var [key] =

时间:2018-06-18 12:24:40

标签: javascript functional-programming variable-assignment

因此,在Kyle Simpson的“功能轻型JavaScript”一书中,他有一章关于使用以下代码示例来编写函数:

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] = ...我似乎找不到有关用方括号命名变量的任何信息,所以他在那时完全失去了我。我能说什么,我读代码就像编译器一样,当我遇到一些我认为违反规则的东西时,我会被绊倒。有人能帮我精神上编译这段经文吗?

2 个答案:

答案 0 :(得分:3)

这是变量(数组)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

答案 1 :(得分:0)

他使用的是array destructuring,它与

几乎完全相同
var key = Object.keys( nextArgObj)[0];