アルゴリズムとプログラミング
次の疑似コードを実行したとき、最後に出力される値はどれか。 ``` var x = 10 function foo(): var x = 20 bar() print(x) function bar(): x = 30 foo() ``` ここで、`bar()` 内の `x = 30` はグローバル変数 `x` を変更し、`foo()` 内の `var x` はローカルスコープを生成するものとする。
ア.コンパイルエラーが発生する
イ.30
ウ.10
エ.20正解
解説
変数のスコープは「家の中の引き出し」のようなもの。foo の引き出し(ローカル x)は bar の引き出し(グローバル x)とは別の場所にある。bar がグローバル x をいくら書き換えても、foo の引き出しの中身は変わらない。
なぜ エ が正解か
foo() 内で `var x = 20` と宣言した時点で、foo のローカルスコープに x=20 が作られる。bar() を呼び出すと bar はグローバル x を 30 に変更するが、これは foo のローカル x とは別の変数である。bar() 終了後、foo() は自身のローカル x(=20)を print するため、出力は 20 となる。
出典: AI生成問題(学習用)