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

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

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

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

3280閲覧

webiopi().readyの挙動について

WEjpon

総合スコア88

JavaScript

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/01/22 05:04

<わからないこと>
Raspberry PiでWebプログラムを作成しようとしています。
とあるサンプルコードにある

JavaScript

1webiopi().ready( my_init );

がどのように動作するのかわかりません。

<コード>
webiopi.jsのコードの関係あると思う部分のみ下記に抜粋します。

JavaScript

1var _webiopi; 2 3function w() { 4 if (_webiopi == undefined) { 5 _webiopi = new WebIOPi(); 6 } 7 8 return _webiopi; 9} 10 11function webiopi() { 12 return w(); 13} 14 15function WebIOPi() { 16 this.readyCallback = null; 17 (中略) 18 19 var jquery = document.createElement('script'); 20 jquery.type = 'text/javascript'; 21 jquery.src = '/jquery.js'; 22 23 jquery.onload = function() { 24 w().init(); 25 }; 26 (中略) 27} 28 29WebIOPi.prototype.init = function() { 30 (中略) 31 if (w().readyCallback != null) { 32 w().readyCallback(); 33 } 34 }); 35} 36WebIOPi.prototype.ready = function (cb) { 37 w().readyCallback = cb; 38}

<私が考えている期待する動作>
webiopi().ready( my_init );
は、何らかの準備ができたらmy_initを呼ぶよう要求するものだと思います。

<私が考えている上記コードの挙動>
webiopi.jsを見ると、readyCallbackが呼ばれるのはinitのみからで、
initが呼ばれるのはWebIOPi()のみからで、
WebIOPi()が呼ばれるのは最初にwebiopi()が呼ばれたときのみだと思います。

webiopi().ready( my_init );

を実行すると、

webiopi()

の時点でnullのreadyCallbackが呼ばれてしまい、その後

.ready( my_init )

でreadyCallbackをセットした後にreadyCallbackが呼ばれることは
無いように思います。

私の考えている挙動に誤りがあるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

initが呼ばれるのは、非同期であるためwebiopi().ready()とした場合、ready()が先に実行され、init()そのあとに実行されます。

投稿2018/01/22 09:27

turbgraphics200

総合スコア4267

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

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

WEjpon

2018/01/22 09:53

ありがとうございます。すみません、まだ少しわかりません。 initが非同期というのは jquery.onload = function() { w().init(); }; のため jqueryがload後にw().init();が呼ばれるからでしょうか? ネットで調べるとwindow.onloadは見つかるのですが jquery.onloadが見つかりません。
turbgraphics200

2018/01/22 10:05

ここでのjquery変数は<script>タグです。
WEjpon

2018/01/23 00:11

何度もありがとうございます。 jquery.jsがLoadされたらinit()が呼ばれると理解しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問