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

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

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

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

Q&A

解決済

2回答

972閲覧

関数スコープの質問 (promise~then)

olee46

総合スコア32

JavaScript

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

0グッド

0クリップ

投稿2018/02/22 07:31

色々調べたのですが、結局よくわからなかったので質問します
以下のようなコードがあったとします

javascript

1let myVar = null; 2 3func() 4.then(function(){ 5 // myVar を使った処理 #1 6}).then(function() { 7 // myVar を使った処理 #2 8}); 9 10// myVarを使った処理 #3

上記の処理#1, #2, #3では、全てmyVarは有効なのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

多分「有効」の意味は

「アクセスできるかどうか」

ではなく

「その位置でどんな時点の値を持つか」
=>「自分が期待する時点の値を持つか」
=>ないし「どんな時点の値を持つか」がわからない

ということではないかなと想像します。

javascript

1let myVar = null; 2 3func() 4.then(function(){ 5 // myVar を使った処理 #1 6}).then(function() { 7 // myVar を使った処理 #2 8}); 9 10// myVarを使った処理 #3

#3開始時点ではmyVarの値は必ずnullになっています。つまりfunc()#1, #2(で起動されるであろう非同期処理)がまだ何も終わっていない状態で#3が実行されます。その後、非同期処理が完了するにしたがって#1, #2の順番に実行されます。

投稿2018/02/22 09:03

KSwordOfHaste

総合スコア18394

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

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

olee46

2018/02/22 09:14

ご想像の通りの意味で「有効」と使っていました、言葉足らずですみません 非同期処理の実行順がわかっていなかったことが原因で、期待した動きをしていませんでした。 ありがとうございました!
guest

0

ちょっと例示の内容がわかりませんが
myVarがグローバルに宣言されているようなので参照できるのでは?

javascript

1<!--IE対策--> 2<script src="https://www.promisejs.org/polyfills/promise-6.1.0.min.js"></script> 3<script> 4var myVar = 1; 5new Promise(function(resolve){ 6 console.log(myVar); 7 myVar++; 8 setTimeout(function(){return resolve()},1000); 9}).then(function(){ 10 new Promise(function(resolve){ 11 console.log(myVar); 12 myVar++; 13 setTimeout(function(){return resolve()},2000); 14 }).then(function(){ 15 console.log(myVar); 16 console.log("end"); 17 }); 18}); 19</script> 20

投稿2018/02/22 07:45

yambejp

総合スコア114843

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

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

olee46

2018/02/22 09:15

グローバルだから参照できるはず、と思っていましたが、そこも不安でしたので、回答していただき助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問