Help us understand the problem. What is going on with this article?

JavaScriptでコールバック関数にあらかじめ引数を渡したい!

More than 3 years have passed since last update.

JavaScriptではイベント処理などで何かとコールバックを使います。でもコールバックが受け取る引数は普通はコールバックを呼び出す側が決めてしまうので自前の引数を渡したいと思うと少し工夫しないといけません。
このサイトを参考にいたしました。
Javascriptでイベントハンドラのコールバック関数に引数を渡す

callback1.js
var action = function(evt){
    alert(evt);
}
var button = document.getElementById("button");
button.addEventListener("click",action,true);

これではactionに渡されるものはevtだけです。
1、二回呼んでみる。関数の中でactionを呼んでみるパターンです。

callback_rap.js
var action = function(evt,arg1,arg2){
    alert(arg1+evt+arg2);
}
var button = document.getElementById("button");
button.addEventListener("click",function(evt){ action(evt,"foo","bar")},true);

2、関数を返す方法

callback_callObj.js
var action = function(arg1,arg2){
    return function(evt){
        alert(arg1+evt+arg2);
    }
}
var button = document.getElementById("button");
button.addEventListener("click", action("foo","bar"),true);

二個目の方法は確かサイ本でプライベート変数の作成をエミュレートする方法として書いてあった気がします。JavaScriptの変数はコールオブジェクトのプロパティとなるので関数が作成された時のarg1とarg2はactionが受け取っていた値で決まってしまうのです。
今回、僕はイベント処理として使ったわけではないですが、コールバック処理には何かと使えるのではないかと思います。

Lewuathe
Java/Scala/Python/Hadoop/Presto
http://www.lewuathe.com
treasuredata
Customer Data Platformの開発・提供をしています。
https://www.treasuredata.com/jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした