Viki

Viki 写东西的地方

努力上进且优秀
github
email
x
steam
bilibili
douban

JavaScript 的函數參數竟然能相互訪問到?

是的,別罵了,我很菜,我在大驚小怪 😩。

const buildFn = (
  name = "Viki",
  sayHi = () => {
    console.log(name);
  }
) => {
  return sayHi;
};

buildFn()(); // 沒問題,預期輸出為 Viki
buildFn("hi")(); // 沒問題,預期輸出為 hi
const buildFn2 = (
  obj = { name: "Viki" },
  sayHi = () => {
    console.log(obj.name);
    obj = { name: "VIKI" };
  },
  sayHi2 = () => {
    console.log(obj.name);
  }
) => {
  return { sayHi, sayHi2 };
};

buildFn2().sayHi(); // 沒問題,預期輸出為 Viki
buildFn2({ name: "hi" }).sayHi2(); // 沒問題,預期輸出為 hi
const buildFn3 = (
  sayHi = () => {
    console.log(name);
  },
  name = "Viki"
) => {
  return sayHi;
};

buildFn3()(); // 沒問題,如果 name 在 sayHi 之後,預期輸出為 Viki
buildFn3(() => console.log(name), "hi")(); // 注意:name 無法被傳遞的 sayHi 函數訪問
const buildFn4 = (
  sayHi = () => {
    console.log(obj.name);
    obj = { name: "VIKI" }; // 這不會影響 sayHi2 中的 obj
  },
  sayHi2 = () => {
    console.log(obj.name);
  },
  obj = { name: "Viki" }
) => {
  return { sayHi, sayHi2 };
};

buildFn4().sayHi(); // 沒問題,預期輸出為 Viki
buildFn4().sayHi2(); // 注意:仍然是 Viki,不會受 sayHi 影響

不僅能相互訪問,而且不受參數順序影響 🙃,可以自己在控制台執行看看。

記錄一下,讓自己加深印象。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。