質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3168閲覧

FileReaderオブジェクトのonloadプロパティの代入値について

tokushun109

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/05/03 11:45

JavaScript、jQuery初学者です。
わかりにくい部分があれば申し訳ありません。

前提・実現したいこと

参考元
参考元の記事を元に、画像投稿時にプレビューが表示される機能を実装しております。
その際、FileReaderオブジェクトのonloadプロパティに代入されている値について理解出来ない点が二つあり、質問させていただきました。

application.js

$(function(){ const $fileField = $('#file'); $($fileField).on('change', $fileField, function(e) { let file = e.target.files[0]; let reader = new FileReader(); const $preview = $("#img_field"); reader.onload = (function(file) { return function(e) { $preview.empty(); $preview.append($('<img>').attr({ src: e.target.result, width: "100%", class: "preview", title: file.name })); }; })(file); reader.readAsDataURL(file); }); });

上記のコードを元にプレビュー機能は実装出来ています。
しかし下記の二つのことが理解出来ません。

reader.onload = (function(file) { return function(e) { $preview.empty(); $preview.append($('<img>').attr({ src: e.target.result, width: "100%", class: "preview", title: file.name })); }; })(file);

の中で、
1、return function(e)で返ってくるeは

$($fileField).on('change', $fileField, function(e) { . . .

で書かれているchangeに対してのイベントという解釈であっているでしょうか?
私のイメージとして、function(e)はイベントハンドラの引数として渡されて、eが使えるというイメージがあったため、return function(e)が何を表しているのか理解できていない状態です。

2、上記コードの最後で書かれている(file);は何を表しているのでしょうか?
関数の定義の最後に(引数)を書くことで何が起きるのでしょうか?

非常に単純な問題なのかもしれませんが、何卒ご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

changeに対してのイベントという解釈であっているでしょうか?

はい、結果的にはそれがセットされます。

上記コードの最後で書かれている(file);は何を表しているのでしょうか?

それは、外側のfunction(file)即時実行するための引数です。fileとして与えた引数が、function(file)fileに代入されます。


もっとも、この状況ではわざわざ即時関数を挟む必要がなく、単にreader.onload = function(e) {で書いて問題なさそうです。

投稿2020/05/03 12:16

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokushun109

2020/05/03 12:32

返信ありがとうございます。 即時関数というものがあるんですね!勉強になりました。 知りたかった質問にお答えいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問