文書の過去の版を表示しています。
— y2sunlight 2021-04-05
var variable = 'グローバル変数'; function func(arg) { var variable = 'ローカル変数'; return `${arg} ${variable}`; } console.log(func('引数')); // 出力:'引数 ローカル変数' console.log(variable ); // 出力:'グローバル変数'
※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる
※ ローカル変数を作りたい時は常に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は上書きされている
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コンストラクタによるスコープはグローバルスコープを持つ