はい、やめてください、私は非常に下手です、私は大げさに驚いています 😩。
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")(); // 注意:渡されたsayHi関数ではnameにアクセスできません
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に影響を受けません
相互にアクセスできるだけでなく、パラメータの順序にも影響されません 🙃、コンソールで試してみてください。
メモして、自分の印象を深めます。