詰まったので自分用メモ
結論
- setTimeoutの第一引数は関数じゃないと効かないっぽい
- bindの返り値は新しい関数
→func.bind
で新しい関数を作り、それをsetTimeoutに渡してるから動くっぽい
例)
hello.bind(null,cat)
が実行されてからsetTimeoutに渡されている
→hello.bind(null,cat)
の返り値はhello(cat){console.log('こんにちは!! ' + cat);}
というhello
メソッドの引数だけcat
になったやつ
=>setTimeout(hello(cat),1000);
になって1秒後に出力される
function hello(animal){
console.log('こんにちは!! ' + animal);
}
const cat="ネコチャン";
setTimeout(hello.bind(null,cat),1000); // 1s後に「こんにちは!! ネコチャン」
↓setTimeoutが効かないやつ
-
hello(cat)
が実行され(この時点で出力されてる)てからsetTimeoutに渡されている
=>hello
メソッド自体に返り値がないからsetTimeout(undefined,1000);
function hello(animal){
console.log('こんにちは!! ' + animal);
}
const cat="ネコチャン";
setTimeout(hello(cat),1000); // 即「こんにちは!! ネコチャン」
bind(null,value)の意味
-
bind
は引数とthis
の束縛ができるよ-
this
の場合、第一引数にオブジェクトを指定する - 引数の場合、第一引数に
null
を指定
-
function hello(animal){
console.log('こんにちは!! ' + animal);
}
const animals= {
cat : "ネコチャン"
}
setTimeout(hello.bind(animals,cat),1000); // 1s後に「こんにちは!! ネコチャン」
bind以外でも書けるみたいだよ
-
setTimeout
の第一引数が関数として渡せればいいから他の書き方でもいける
// 例1
function hello(animal){
return function(){
console.log('こんにちは!! ' + animal);
}
}
const cat="ネコチャン";
setTimeout(hello(cat),1000);
// 例2
function hello(animal){
console.log('こんにちは!! ' + animal);
}
const cat="ネコチャン";
setTimeout(function(){hello(cat)},1000);
参考にしたもの