0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ JavaScript 入門 ]ブロックスコープの概念を問題を解いたら少し理解できた件

Posted at

##JavaScriptのブロックスコープに関する問題を解いてみた:raised_hand:  
###問題:writing_hand:

* 問題:
 * 以下のコードではエラーが発生します。
 * コンソールで"fn called"と表示されるように
 * fn内のコードを変更してください。
 * 
 * ※if文は削除してはいけません。
 */
function fn() {
    if(true) {
        let a = 'fn called';
    }
    return a; // ReferenceError: a is not defined
}

const result = fn();
console.log(result);

解答:v:
ifの中でletを使って変数定義している為、ブロックスコープが有効になり、ブロックスコープの外で、return a; のようにaを呼び出そうとしてもReferenceError: a is not definedのようなエラーが出てしまう!:frowning2:  

よって、ブロックスコープの外に変数宣言を持っていくことでエラーを解消することができる!!

function fn() {
    let a;
    if(true) {
         a = 'fn called';
    }
    return a; 
}

const result = fn();
console.log(result);

このようにしてあげることによって、return a; とlet a;が同じスコープ内にあることからa; を呼び出すことができる!

ちなみに、let a = 'fn called'; を var a = 'fn called';にすることで、varはブロックスコープを無視することより、aを取得することはできるが、varは非推奨とのことだったので、上記のような方法でa;を取得しました!:ok_hand:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?