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

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

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

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

Q&A

解決済

2回答

881閲覧

[javascript]変数の参照について

xjaPANDA

総合スコア124

JavaScript

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

0グッド

0クリップ

投稿2019/07/07 06:58

編集2019/07/07 07:00

下記のコードでは、indexedDBに1行のデータを保存して、そのデータを取得しています。その仮定で、変数参照時に、わからないことがありましたので質問するに至りました。

疑問点は、
データ取得用に用意した変数 idと変数 wordに、初期値を設定し、その後にデータを取得し、上書きしています。しかし、その後、上書きしたはずのデータが初期にセットした値に戻っていることです。

順に見ていくと

下記コード※0 
こちらの部分で、変数 id と 変数 word に初期の値をセットしています。

下記コード※1 
この部分で、取得したデータを変数 id と 変数 word に上書きします。
console.log()で中身をみても、変数は上書きされています。

下記コード※2
この部分で、もういちどconsole.log()で確認してみると、変数 id と 変数 wordの値が初期値になっています。

やりたいことは、こちらの下記コード※2の位置で、取得して上書きしたデータを参照したいのですが、どのようにすればよいでしょうか?

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"><title>Test</title> </head> <body> <script> (function() { 'use strict'; //データベースとストア作成 var dbName ='Test'; var storeName ='SampleDate'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB; var openRequest = indexedDB.open(dbName, 1.0); var openGet = indexedDB.open(dbName, 1.0); openRequest.onupgradeneeded = function(e) { db = e.target.result; openRequest.onsuccess = function(event) { db = event.target.result; } db.createObjectStore(storeName, { keyPath: 'id'}); } //データ挿入 var data = {id : 'B10300', word : 'Good Morning!'}; openRequest.onsuccess = function(e){ db = e.target.result; var putReq = db.transaction(storeName, 'readwrite').objectStore(storeName).put(data); } //データ取得 var searchId = 'B10300'; var id = 0; //(※0)初期値:0 var word = 'Hello World!!'; //(※0)初期値:Hellow World!! openGet.onsuccess = function(e){ db = e.target.result; var getReq = db.transaction(storeName, 'readonly').objectStore(storeName).get(searchId); getReq.onsuccess = function(ev){ id = ev.target.result.id; word = ev.target.result.word; console.log(id); //(※1) 上書き: B10300 console.log(word);//(※1) 上書き: Good Morning! } } console.log(id); //(※2) 0 初期値になってしまう  console.log(word); //(※2) Hello World!! 初期値になってしまう })(); </script> </body> </html>

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

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

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

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

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

guest

回答2

0

ナナメ読みしかしてませんが
※2の時点ではopenGet.onsuccess処理の内容を定義しただけで、まだ実行されていないので初期値のままなのは当然かと。

投稿2019/07/07 12:02

gentaro

総合スコア8949

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

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

0

ベストアンサー

getReq.onsuccessに代入している関数はたぶん非同期処理なので「(※2)」より後に実行されます。
「取得して上書きしたデータを参照したい」処理をgetReq.onsuccess内から実行するのが手早いです。

投稿2019/07/07 07:33

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問