JavaScriptの勉強をしています。
問題集の例題をカスタマイズして、
以下のようにコードを作成しました。
とりあえず動くのですが、最後の
console.log(tax);
の出力が
ReferenceError: tax is not defined
になります。
コードの中では、taxが0.08で演算されており、
totalの値もちゃんと出力されるのですが、
なぜ最後のコンソールログで「tax」だけエラーになるのでしょうか?
詳し方、説明の上手な方、お手数ですが、教えて下さい。
<script>
var total = function(price) {
var tax = 0.08;
return price * tax price;
}
console.log(total(8000));
console.log(tax);
</script>
No.3ベストアンサー
- 回答日時:
こんんちは
「変数のスコープ」について考えてみるのが宜しいかと。
以下に、ほぼ同じような例を挙げての説明がありますので、わかりやすいかも。
https://developer.mozilla.org/ja/docs/Web/JavaSc …
このあたりも参考になるかも
https://developer.mozilla.org/ja/docs/Web/JavaSc …
おまけで、関数のスコープ
https://developer.mozilla.org/ja/docs/Web/JavaSc …
解答して頂きありがとうございます。
https://mzl.la/2VbhoDB
↓
1. 宣言した変数は、その変数を宣言した実行コンテキストの内部にあるとみなされます。
宣言していない変数は、常にグローバルになります。
ということなので、
var total = function(price) //スコープ外で宣言しているからグローバル
{ var tax = 0.08; //スコープ内で宣言しているから、実行コンテキストの内部のみで有効。
ということですね。よくわかりました。
今回は解答して頂きありがとうございます。
機会がありましたら、またお願いします。
※質問はしばらくあけておきます。
No.4
- 回答日時:
>だったらどうして、同じようにスコープ外にある
>console.log(total(8000));
>
>は機能するのかな?と思いました。
>どちらもスコープ外にあるのですが、
同じではありません。
total の宣言(var)が存在するのは <script> の直下です。total の有効範囲(スコープ)は </script> までです。
tax の宣言が存在するのは、function(price) { の中です。tax の有効範囲は function(price) { の対になる } までです。
解答して頂きありがとうございます。
初心者なので、
>変数のスコープ外だからです。
のご返答で、そこまで理解するのは無理でした。
今回はいろんな方に教えて頂き、よくわかりました。
何度も、解答して頂きありがとうございます。
機会がありましたら、またお願いします。
No.2
- 回答日時:
JavaScriptの勉強をしているのならば尚更
定数として扱われる const でしょう
const TAX = 0.08;
let total = (price) => price * TAX |0; // |0は蛇足
解答して頂きありがとうございます。
説明足らずですいません。
JavaScriptの勉強を始めてまだ1カ月たっておらず、
今回、教えて頂いた「const 」というのは
初めて見ました。
軽く調べてみたのですが、
https://bit.ly/2Smbb60
今の私では全く意味が理解できません。
No1さんのご解答のとおり、
const TAX = 0.08;
let total = (price) => price * TAX |0; // |0は蛇足
とスコープ外で機能するconsole.logと機能しないものがあるのと
何か関係があるのでしょうか?
console.log(total(8000)); //動作する
console.log(tax); //エラーになる?なんで?
理由をご存じでしたら、説明して頂けたらうれしいです。
ご面倒でしたら、スルーでOKです。
今回は解答して頂きありがとうございます。
No.1
- 回答日時:
変数のスコープ外だからです。
解答して頂きありがとうございます。
>変数のスコープ外だからです。
}の範囲外だから、、、。ということだと思います。
それは理解できます。
だったらどうして、同じようにスコープ外にある
console.log(total(8000));
は機能するのかな?と思いました。
どちらもスコープ外にあるのですが、
どうして、
console.log(total(8000));
だけ機能して、
console.log(tax);
はエラーになるのかな?
と思い、質問させて頂きました。
聞き方が下手ですいません。
もし何か理由があり、ご説明できるようでしたら、
教えて頂ければうれしいです。
ご面倒なら、スルーでOKです。
今回は解答して頂きありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- その他(税金) 令和3年分の医療費控除をe-taxで行おうとしております。 何度やっても、最後の送信で写真のようにエ 2 2022/12/02 21:40
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- 確定申告 確定申告の生命保険料控除の添付書類について 1 2023/02/03 22:55
- 確定申告 e-taxで開業届を出す方法がわかりません 1 2022/06/01 19:00
- Chrome(クローム) chromebookとe-Tax 1 2022/11/22 23:29
- C言語・C++・C# C言語の質問です HTMLでこのようなコードを書いたのですがそれをC言語で同じように書きたいです < 1 2022/08/11 23:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
Jqueryのajax処理
-
functionから別のfunctionを実...
-
[Delphi]入れ子(?)になったプロ...
-
jQueryの :not() .not() が有効...
-
google apps scriptの終了のさせ方
-
Boolean型配列中のTrueの有無を...
-
JavaScriptで決まった「時刻」...
-
C#テキストボックスの文字を配...
-
JavaScript window.openで開く...
-
jspからjavascriptの変数引継ぎ
-
jqGridについて
-
ActiveXobjectが作成できない
-
javascriptのdocument.allにつ...
-
Vb.netのグローバル変数の宣言...
-
<a>タグのテキストを取得
-
C#OpenCv V4にのエラーに関する...
-
ローカルにあるファイルを検索...
-
C# 演算 奇数と偶数 表現の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
jQueryの :not() .not() が有効...
-
クリックすると上に開くアコー...
-
jQueryのプラグイン「Skitter」...
-
関数名をテキストから読み込む...
-
小数点以下を5刻みで表示
-
XMLHttpRequestでキャッシュを...
-
jQueryでzipを解凍読み込みする...
-
Matlabで自作関数をオーバーロード
-
javascript(jQuery)でセル内...
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
処理前の「お待ちください」
-
JS 頭文字が大文字について
-
HTML5でファイルドラッグ&ドロ...
-
Javascriptリアルタイムエラー...
-
getElementByIdを使用したグロ...
おすすめ情報