Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:function:scope

文書の過去の版を表示しています。


JavaScript 変数のスコープ

y2sunlight 2021-04-05

var variable = 'グローバル変数';
function func(arg) {
    var variable = 'ローカル変数';
    return `${arg} ${variable}`;
}
console.log(func('引数'));  // 出力:'引数 ローカル変数'
console.log(variable );  // 出力:'グローバル変数'

グローバル変数

  • 関数の外でvarにより宣言された変数
  • varを使用しない全ての変数はグローバル変数として扱われる

※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる

ローカル変数

  • 関数内でvarにより宣言された変数
  • 仮引数

※ ローカル変数を作りたい時は常にvar
※ ES2015以前はブロックスコープがなかった

var myVariable = 'Global Variable';
 
function func() {
    console.log(myVariable);  // 出力:undefined
    var myVariable;
    return myVariable;
}
 
console.log(func());  // 出力:undefined

varの位置に関わらずmyVariableは関数内のどこでも常にローカルスコープを持つ
※ var myVariableをコメントアウトするとグローバルスコープを持つようになる
⇒ 変数の巻き上げ(hoisting)と呼ばれる

ブロックスコープ*2015

let(変数)又はconst(定数)によりブロックスコープを作る事ができる

let i = 1;
var j = 1;
const c = 1;
{
    let i = 2;
    var j = 2;
    const c = 2;
    console.log(`${i} ${j} ${c}`);  // 出力:2 2 2
}
console.log(`${i} ${j} ${c}`);  // 出力:1 2 1 ※varは上書きされている

Functionコンストラクタと関数リテラルのスコープ

var variable = 'Global Scope';
 
function func() {
    var variable = 'Local Scope'; 
    var func1 = new Function('return variable');
    var func2 = function(){return variable};
    var func3 = () => variable;
 
    console.log(func1());  // 出力:Global Scope
    console.log(func2());  // 出力:Local Scope
    console.log(func3());  // 出力:Local Scope
}
 
func();

Functionコンストラクタによるスコープはグローバルスコープを持つ

js/function/scope.1618187408.txt.gz · 最終更新: 2021/04/12 09:30 by y2sunlight