var
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
var æã¯é¢æ°ã¹ã³ã¼ãã¾ãã¯ã°ãã¼ãã«ã¹ã³ã¼ãã®å¤æ°ã宣è¨ããä»»æã§ãããããå¤ã«åæåãã¾ãã
試ãã¦ã¿ã¾ããã
var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// äºæ³ãããçµæ: 2
}
console.log(x);
// äºæ³ãããçµæ: 2
æ§æ
var name1;
var name1 = value1;
var name1 = value1, name2 = value2;
var name1, name2 = value2;
var name1 = value1, name2, /* â¦, */ nameN = valueN;
nameN-
宣è¨ãã夿°ã®ååãããããã®ååãæå¹ãª JavaScript èå¥åã¾ãã¯æ§é åè§£çµåãã¿ã¼ã³ã§ãªããã°ãªãã¾ããã
valueNçç¥å¯-
ãã®å¤æ°ã®åæå¤ã§ããæå¹ãªå¼ãªãä½ã§ãåããã¨ãã§ãã¾ããããã©ã«ãå¤ã¯
undefinedã§ãã
解説
var ã§å®£è¨ããã夿°ã®ã¹ã³ã¼ãã¯ãvar æãæãè¿ãå«ã次ã®ä¸æ¬å¼§ã§å²ã¾ããæ§æã®ããããã§ãã
- 颿°æ¬ä½
- éçåæåãããã¯
ã¾ãã¯ä¸è¨ã®ããããé©ç¨ãããªãå ´åã
- ç¾å¨ã®ã¢ã¸ã¥ã¼ã«ï¼ã¢ã¸ã¥ã¼ã«ã¢ã¼ãã§å®è¡ä¸ã®ã³ã¼ãã®å ´åï¼
- ã³ã¼ããå®è¡ãã¦ããã°ãã¼ãã«ã¹ã³ã¼ãï¼ã¹ã¯ãªããã¢ã¼ãã®å ´åï¼
function foo() {
var x = 1;
function bar() {
var y = 2;
console.log(x); // 1 (颿° `bar` ã `x` ãéãã)
console.log(y); // 2 (`y` ã¯ã¹ã³ã¼ãå
)
}
bar();
console.log(x); // 1 (`x` ã¯ã¹ã³ã¼ãå
)
console.log(y); // ReferenceError, `y` 㯠`bar` ã®ã¹ã³ã¼ã
}
foo();
éè¦ãªç¹ã¨ãã¦ããã®ä»ã®ãããã¯æ§é ï¼ãããã¯æãtry...catchãswitchãfor æã®ããããã®ãããã¼ãªã©ï¼ã¯ var ç¨ã®ã¹ã³ã¼ãã使ããããã®ãããªãããã¯å
ã§ var ã使ã£ã¦å®£è¨ããã夿°ã¯ããããã¯ã®å¤å´ã§ãåç
§å¯è½ã§ãã
for (var a of [1, 2, 3]);
console.log(a); // 3
ã¹ã¯ãªããå
ã§ãvar ã使ç¨ãã¦å®£è¨ããã夿°ã¯ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã®æ§æä¸å¯è½ãªããããã£ã¨ãã¦è¿½å ããã¾ããããã¯ãããããã£è¨è¿°åã夿´ãããã¨ãã§ãããdelete ã使ç¨ãã¦åé¤ãããã¨ãã§ããªããã¨ãæå³ãã¾ããJavaScript ã«ã¯èªåã¡ã¢ãªã¼ç®¡çæ©è½ããããããã°ãã¼ãã«å¤æ°ã« delete æ¼ç®åã使ããããã«ãã¦ãæå³ãããã¾ããã
"use strict";
var x = 1;
Object.hasOwn(globalThis, "x"); // true
delete globalThis.x; // TypeError in strict mode. Fails silently otherwise.
delete x; // SyntaxError in strict mode. Fails silently otherwise.
NodeJS ã® CommonJS ã¢ã¸ã¥ã¼ã«ã¨ãã¤ãã£ãã® ECMAScript ã¢ã¸ã¥ã¼ã«ã®ã©ã¡ãããæä¸ä½ã®å¤æ°å®£è¨ã¯ãã®ã¢ã¸ã¥ã¼ã«ã®ã¹ã³ã¼ãã¨ãªãã®ã§ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã®ããããã£ã¨ãã¦ã¯è¿½å ããã¾ããã
var ãã¼ã¯ã¼ãã«ç¶ããªã¹ãã¯ãã¤ã³ãã£ã³ã°ãªã¹ãã¨å¼ã°ããã«ã³ãã§åºåããã¾ããããã§ã«ã³ãã¯ã«ã³ãæ¼ç®å ã§ã¯ãªãã= è¨å·ã代å
¥æ¼ç®åã§ã¯ããã¾ãããå¾ç¶ã®å¤æ°ã®åæååã¯ããªã¹ãå
ã®å
è¡ãã夿°ãåç
§ããåæåãããå¤ãåå¾ã§ãã¾ãã
å·»ãä¸ã
var 宣è¨ã¯ãã¹ã¯ãªããå
ã®ã©ãã§çºçãã¦ããã¹ã¯ãªããå
ã®ã³ã¼ããå®è¡ãããåã«å¦çããã¾ããã³ã¼ãå
ã®ã©ãã§å¤æ°ã宣è¨ãã¦ãããã®å¤æ°ã¯å
é ã«å®£è¨ããããã®ã¨åçã§ããããã¯åæã«ã夿°ã宣è¨ãããåã«ä½¿ç¨ããã¦ããããã«è¦ãããã¨ãæå³ãã¾ãããã®åä½ã¯å·»ãä¸ãã¨å¼ã°ãã¾ããããã¯ã夿°å®£è¨ã颿°ãéçåæåãããã¯ãã¹ã¯ãªããã½ã¼ã¹ãªã©ã®å
é ã«ç§»åãããããã«è¦ããããã§ãã
ã¡ã¢:
var 宣è¨ã¯ç¾å¨ã®ã¹ã¯ãªããã®å
é ã¾ã§ããå·»ãä¸ãããã¾ããã1 ã¤ã® HTML å
ã« 2 ã¤ã® <script> è¦ç´ ãããå ´åã2 ã¤ç®ã®ã¹ã¯ãªãããå¦çã»å®è¡ãããåã«ãæåã®ã¹ã¯ãªãã㯠2 ã¤ç®ã®ã¹ã¯ãªããã§å®£è¨ããã夿°ã«ã¢ã¯ã»ã¹ã§ãã¾ããã
bla = 2;
var bla;
次ã®ããã«è¦ãªããã¾ãã
var bla;
bla = 2;
ãã®ããã夿°ã¯å¸¸ã«ãã®ã¹ã³ã¼ãã®å é ï¼ã°ãã¼ãã«ã³ã¼ãã®å é ããã³é¢æ°ã³ã¼ãã®å é ï¼ã§å®£è¨ãããã¨ãæ¨å¥¨ãã¾ããããã«ãããã©ã®å¤æ°ãç¾å¨ã®é¢æ°ã«ã¹ã³ã¼ãããã¦ããããæç¢ºã«ãªãã¾ãã
å·»ãä¸ããããã®ã¯å¤æ°ã®ã¿ã§ãããåæåã¯å·»ãä¸ãããã¾ãããåæåã¯ä»£å
¥æã«å°éããã¨ãã«ã®ã¿è¡ããã¾ããããã¾ã§ã¯å¤æ°ã¯ undefined ï¼ãã ã宣è¨ãããç¶æ
ï¼ã®ã¾ã¾ã«ãªãã¾ãã
function doSomething() {
console.log(bar); // undefined
var bar = 111;
console.log(bar); // 111
}
ããã¯ãæé»çã«ã¯æ¬¡ã®ããã«è§£éããã¾ãã
function doSomething() {
var bar;
console.log(bar); // undefined
bar = 111;
console.log(bar); // 111
}
å宣è¨
var ã使ç¨ãã¦å¤æ°ãéè¤ãã¦å®£è¨ãã¦ãã峿 ¼ã¢ã¼ãã§ãã£ã¦ãã¨ã©ã¼ã¯çºçããã宣è¨ã«åæååãå«ã¾ãã¦ããªãéãã夿°ã®å¤ã¯å¤±ããã¾ããã
var a = 1;
var a = 2;
console.log(a); // 2
var a;
console.log(a); // 2; not undefined
var 宣è¨ã¯ function 宣è¨ã¨åæã«ãåãã¹ã³ã¼ãå
ã«ç½®ããã¨ãå¯è½ã§ãããã®å ´åãvar 宣è¨ã®åæååã¯ã両è
ã®ç¸å¯¾çãªä½ç½®ã«é¢ä¿ãªãã常ã«é¢æ°ã®å¤ã䏿¸ããã¾ããããã¯ã颿°å®£è¨ãåæååã®è©ä¾¡ããå
ã«å·»ãä¸ããããããã§ãããåæååãå¾ããå®è¡ããããã¨ã§å¤ã䏿¸ãããããã§ãã
var a = 1;
function a() {}
console.log(a); // 1
var 宣è¨ã¯ letãconstãclassãimport 宣è¨ã¨ã¯åãã¹ã³ã¼ãã«ç½®ããã¨ãã§ãã¾ããã
var a = 1;
let a = 2; // SyntaxError: Identifier 'a' has already been declared
var 宣è¨ã¯ãããã¯ã¹ã³ã¼ãã§ã¯ãªããããæ¬¡ã®å ´åã«ãé©ç¨ããã¾ãã
let a = 1;
{
var a = 1; // SyntaxError: Identifier 'a' has already been declared
}
次ã®å ´åã«ã¯é©ç¨ããã¾ãããããã§ let 㯠var ã®åã¹ã³ã¼ãã«ãããåãã¹ã³ã¼ãã§ã¯ãªãããã§ãã
var a = 1;
{
let a = 2;
}
颿°æ¬ä½å
ã® var 宣è¨ã¯ã弿°ã¨åãååãæã¤ãã¨ãã§ãã¾ãã
function foo(a) {
var a = 1;
console.log(a);
}
foo(2); // Logs 1
catch ãããã¯å
ã® var 宣è¨ã¯ãcatch ã«çµã³ã¤ããããèå¥åã¨åãååãæã¤ãã¨ãã§ãã¾ãããã ããcatch ã®çµã³ã¤ããåç´ãªèå¥åã§ãããæ§é åè§£ãã¿ã¼ã³ã§ãªãå ´åã«éãã¾ããããã¯éæ¨å¥¨ã®æ§æã§ãããé ¼ãã¹ãã§ã¯ããã¾ããããã®å ´åã宣è¨ã¯ catch ãããã¯ã®å¤å´ã«å·»ãä¸ãããã¾ãããcatch ãããã¯å
ã§ä»£å
¥ãããå¤ã¯å¤é¨ããã¯åç
§ã§ãã¾ããã
try {
throw new Error();
} catch (e) {
var e = 2; // Works
}
console.log(e); // undefined
ä¾
>2 ã¤ã®å¤æ°ã宣è¨ãã¦åæå
var a = 0,
b = 0;
2 ã¤ã®å¤æ°ã« 1 ã¤ã®æååãä»£å ¥
var a = "A";
var b = a;
ããã¯ã以ä¸ã¨ç価ã§ãã
var a, b = a = "A";
é çªã«æ³¨æãã¦ãã ããã
var x = y,
y = "A";
console.log(x, y); // undefined A
ããã§ã¯ã³ã¼ããå®è¡ããåã« x 㨠y ã宣è¨ããããã®ãã¨ã«ä»£å
¥ãè¡ãã¾ãã"x = y" ãå®è¡ããã¨ããy ãåå¨ãã¾ãã®ã§ ReferenceError ã¯çºçãããå¤ã¯ undefined ã«ãªãã¾ãããã£ã¦ãx ã« undefined å¤ã代å
¥ããã¾ããããã¦ãy ã«å¤ 'A' ã代å
¥ããã¾ãã
è¤æ°ã®å¤æ°ãåæå
var x = y = 1 æ§æã«ã¯æ³¨æãå¿
è¦ã§ããy ã¯å®éã«ã¯å¤æ°ã¨ãã¦å®£è¨ããã¦ããªããããy = 1 ã¯ä¿®é£¾ããã¦ããªãèå¥åã¸ã®ä»£å
¥ã¨ãªãã峿 ¼ã¢ã¼ãã§ãªãå ´åã¯ã°ãã¼ãã«å¤æ°ãçæããã¾ãã
var x = 0;
function f() {
var x = y = 1; // x ã¯ãã¼ã«ã«ã§å®£è¨ããã¾ããy ã¯ã°ãã¼ãã«ã§ãã
}
f();
console.log(x, y); // 0 1
// 峿 ¼ã¢ã¼ãã§ã¯ãªãå ´å:
// x ã¯æ³å®ã©ãããã°ãã¼ãã«å´ã®å¤æ°ã§ãã
// ããããy ã¯é¢æ°ã®å¤é¨ã«æ¼ãåºã¦ãã¾ãã
ä¸è¨ã¨åãä¾ã峿 ¼ã¢ã¼ãã§å®è¡ããå ´åã¯ã次ã®ããã«ãªãã¾ãã
"use strict";
var x = 0;
function f() {
var x = y = 1; // 峿 ¼ã¢ã¼ãã§ã¯ ReferenceError ãçºçãã¾ãã
}
f();
console.log(x, y);
æé»ã®ã°ãã¼ãã«å¤æ°ã¨é¢æ°ã¹ã³ã¼ãã®å¤é¨
æé»çã«ã°ãã¼ãã«ã«ç¾ãã夿°ã¯ã颿°ã¹ã³ã¼ãã®å¤é¨ã§åç §ãããã¨ãã§ãã¾ãã
var x = 0; // x ã¯ãã¡ã¤ã«ã¹ã³ã¼ãã§å®£è¨ãã¦ãå¤ 0 ã代å
¥
console.log(typeof z); // z ã¯ã¾ã åå¨ãã¦ããªãããã "undefined" ã«ãªã
function a() {
var y = 2; // y ã颿° a ã®ã¹ã³ã¼ãå
ã§å®£è¨ããå¤ 2 ã代å
¥
console.log(x, y); // 0 2
function b() {
x = 3; // ãã¡ã¤ã«ã¹ã³ã¼ãã«ãã x ã« 3 ã代å
¥
y = 4; // å¤å´ã® y ã« 4 ã代å
¥
z = 5; // æ°ããªã°ãã¼ãã«å¤æ° z ãçæãã¦ãå¤ 5 ã代å
¥
// ï¼å³æ ¼ã¢ã¼ãã§ã¯ ReferenceError ãçºçï¼
}
b(); // ã°ãã¼ãã«å¤æ°ã¨ã㦠z ãçæ
console.log(x, y, z); // 3 4 5
}
a(); // b ãå¼ã³åºã
console.log(x, z); // 3 5
console.log(typeof y); // y ã¯é¢æ° a ã®ãã¼ã«ã«å¤æ°ã§ãããã "undefined" ã«ãªã
æ§é åè§£ã§ã®å®£è¨
ããããã® = ã®å·¦å´ããã¤ã³ãã£ã³ã°ãã¿ã¼ã³ã¨ãããã¨ãã§ãã¾ããããã«ãããè¤æ°ã®å¤æ°ãä¸åº¦ã«ä½æãããã¨ãã§ãã¾ãã
const result = /(a+)(b+)(c+)/.exec("aaabcc");
var [, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"
詳ããã¯æ§é åè§£ãåç §ãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-variable-statement > |