引数分割束縛
めっちゃ覚えにくい
以下だと理解している違う
f({param})
とは、fの第一引数に渡されたxxxのうち、param プロパティについては、関数内で xxx.
を省略できる
Javascriptの場合、省略はいつでもできます。省略すると undefined
になります
jsfunction test({param}) {
console.log('This is the test function.');
console.log(`param is ${param}.`);
}
test({param: 'baz'});
// → This is the test function.
// → param is baz.
test({foo: 'baz'});
// → This is the test function.
// → param is undefined.
正しくは
f({param})
とは、 f
の第一引数に渡された xxx
のうち、 param
だけを取り出している
つまり xxx.param
だけ使いたい場合に、
普通だと f(xxx){……xxx.param……}
こうなる
f()
内部でいちいち xxx.param
と書く必要があってだるい
引数分割束縛使うと f({param}){……param……}
こうなる
f()
内部でいちいち xxx.param
と書かなくても良い。 param
だけでいい
初めて知った
例
jsfunction test({key2}){ // 引数として渡されたobjを分解し、そのうちのkey2だけを取り出している
console.log(obj.key1) // objがないので怒られる
console.log(key2) // 引数分割束縛してるので obj. が要らない
console.log(obj.key3)
}
let obj = {
key1: '1',
key2: '22',
key3: '333',
}
test(obj)
// 1
// 22
// 333
怒られないっぽい
あれ?なんでだろう
あー、外のobj見に行ってますね(よくやるミス
obj
のスコープか
let obj
にしないと、スコープをぶち抜いてしまう
単に前のコードが残っているだけかな?
グローバル変数にしちゃうと、関数の後で定義した変数を関数内から参照できてしまうようだ
Javascriptのグローバル変数怖すぎだろ
そうだったのか……これはハマる
自分も今実行して知りました……