是的,別罵了,我很菜,我在大驚小怪 😩。
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 影響
不僅能相互訪問,而且不受參數順序影響 🙃,可以自己在控制台執行看看。
記錄一下,讓自己加深印象。