访问被解构的项目

Access item that is destructured

在 ClojureScript 中,可以将要解构的原始项目存储在单独的值中。例如,当使用映射 {:a "A" :b "B" :c 3 :d 4} 调用下面的匿名函数时,键 ab 被解构,原始映射使用 :as 存储在 m 中运算符。

((fn [{:keys [a b] :as m}]
   (println "a is" a)
   (println "b is" b)
   (println "m is" m))
  {:a "A" :b "B" :c 3 :d 4})

;; => a is A
;;    b is B
;;    m is {:a "A" :b "B" :c 3 :d 4}
;;    nil

ECMAScript 中是否有类似的操作?例如,

(({ a, b }) => {
  console.log(`a = ${a}`);
  console.log(`b = ${b}`);
  console.log(`m = ${???}`);
})({ a: "A", b: "B", c: 3, d: 4 });

或者是否需要先将原始项存储在变量中,然后再解构?

((m) => {
  const { a, b } = m;
  console.log(`a is ${a}`);
  console.log(`b is ${b}`);
  console.log(`m is ${m}`);
})({ a: "A", b: "B", c: 3, d: 4 });

;; => a is A
;;    b is B
;;    m is [Object object]

如果要访问原始参数,则应将其解构为函数体中的变量:

(m) => {
  const { a, b } = m;
  ...
}

即使未访问,这种样式也是有益的,因为它允许在出现问题时调试参数,尤其是在 arguments 不可用的本机箭头函数中。