ãã®è¨äºã®æ å ±ã¯å¤ãã¹ã¯ãªãããçè§£ããã®ã«å½¹ç«ã¡ã¾ãã
æ°ããã³ã¼ããè¨è¿°ããæ¹æ³ã§ã¯ããã¾ããã
夿° ã®æåã®ç« ã§ã¯ã夿°ã宣è¨ãã3ã¤ã®æ¹æ³ã«ã¤ãã¦è¿°ã¹ã¾ãã:
letconstvar
var 宣è¨ã¯ let ã¨åããããªæ¯ãèãããã¾ããã»ã¨ãã©ã®å ´åã§ let ã var ãããã¯å¾ã®éã«ç½®ãæãããã¨ãã§ããæå¾
éãã«åä½ããã§ããã:
var message = "Hi";
alert(message); // Hi
ã§ãããå
é¨çã«ã¯ var ã¯ãã£ã¨æãã使ããã¦ãããå
¨ãç°ãªããã®ã§ããä¸è¬çã«ã¯æè¿ã®ã¹ã¯ãªããã§ã¯å©ç¨ããã¦ãã¾ããããå¤ãã¹ã¯ãªããã«ã¯ä¾ç¶ã¨ãã¦æ½ãã§ãã¾ãã
ãã®ãããªã¹ã¯ãªããã«åºä¼ãäºå®ããªãã®ã§ããã°ããã®ç« ã¯ã¹ããããããå¾åãã«ãã¦ãã ããã
䏿¹ã§ãå¤ãã¹ã¯ãªããã var ãã let ã«ç§»è¡ããéã«ã¯å¥å¦ãªã¨ã©ã¼ãé¿ããããã«éããçè§£ãããã¨ãéè¦ã§ãã
âvarâ ã¯ãããã¯ã¹ã³ã¼ããæã¡ã¾ãã
var ã§å®£è¨ããã夿°ã¯ã颿°ã¹ã³ã¼ããã°ãã¼ãã«ã¹ã³ã¼ãã®ããããã§ãããããã¯ãéã£ã¦è¦ãã¾ãã
ä¾:
if (true) {
var test = true; // "let" ã®ä»£ããã« "var" ã使ã
}
alert(test); // true, if ã®å¾ã夿°ã¯çãã¦ãã¾ã
var ã¯ã³ã¼ããããã¯ãç¡è¦ããã®ã§ãã°ãã¼ãã«ã® test ãåå¾ãã¾ãã
var test ã®ä»£ããã« let test ãå©ç¨ããã¨ã夿°ã¯ if ã®ä¸ã§ã®ã¿è¦ãã¾ã:
if (true) {
let test = true; // use "let"
}
alert(test); // ReferenceError: test is not defined
ã«ã¼ãã§ãåæ§ã§ã: var ã¯ãããã¯ãã¾ãã¯ã«ã¼ãã®ãã¼ã«ã«ã«ã¯ãªãã¾ãã:
for (var i = 0; i < 10; i++) {
var one = 1;
// ...
}
alert(i); // 10, "i" ã«ã¼ãå¾ãè¦ããããã¯ã°ãã¼ãã«å¤æ°ã§ã
alert(one); // 1, "one" ã¯ã«ã¼ãå¾ãè¦ããããã¯ã°ãã¼ãã«å¤æ°ã§ã
ã³ã¼ããããã¯ã颿°ã®å
å´ã«ããå ´åãvar ã¯é¢æ°ã¬ãã«ã®å¤æ°ã«ãªãã¾ã:
function sayHi() {
if (true) {
var phrase = "Hello";
}
alert(phrase); // works
}
sayHi();
alert(phrase); // Error: phrase ã¯æªå®ç¾©
ä¸ã®éããvar 㯠if, for ãããã¯ä»ã®ã³ã¼ããããã¯ã貫éãã¾ããããã¯ãJavaScriptã¯é·ãéãããã¯ãã¬ãã·ã«ã«ç°å¢ãæã£ã¦ããªãã£ãããã§ããvar ã¯ãããæ³èµ·ããã¾ãã
âvarâ ã¯å宣è¨ã許容ãã¾ã
åãã¹ã³ã¼ãå
ã§2å let ã§åã夿°ã宣è¨ããã¨ãã¨ã©ã¼ã«ãªãã¾ã:
let user;
let user; // SyntaxError: 'user' has already been declared
var ã§ã¯ä½åº¦ã§ã夿°ã®å宣è¨ãå¯è½ã§ããvar ã§æ¢ã«å®£è¨ãã夿°ã使ç¨ããã¨ãvar ãç¡è¦ãã¾ãã
var user = "Pete";
var user = "John"; // "var" ã¯ä½ããã¾ãã (å®£è¨æ¸ã¿)
// ...ã¨ã©ã¼ã¯çºçãã¾ãã
alert(user); // John
âvarâ ã¯ããã®ä½¿ç¨ã®ä¸ã§å®£è¨ãããã¨ãã§ãã¾ã
var 宣è¨ã¯ã颿°ã®éå§æ(ã¾ãã¯ã°ãã¼ãã«ã®ã¹ã¯ãªããéå§æ)ã«å¦çããã¾ãã
è¨ãæããã¨ãvar 夿°ã¯é¢æ°ã®æåã§å®ç¾©ãããå®ç¾©ãããå ´æã¯é¢ä¿ããã¾ãã(å®ç¾©ããã¹ãããã颿°ã§ã¯ãªãã¨è¨ãä»®å®ã§)ã
ãªã®ã§ã以ä¸ã®ã³ã¼ããã¿ã¦ãã ãã:
function sayHi() {
phrase = "Hello";
alert(phrase);
var phrase;
}
sayHi();
â¦ããã¯æè¡çã«ã¯ä»¥ä¸åãã§ã(var phrase ãä¸ã«ç§»åããã¦ãã¾ã):
function sayHi() {
var phrase;
phrase = "Hello";
alert(phrase);
}
sayHi();
â¦ãããã¯ããã§ã(ã³ã¼ããããã¯ãç¡è¦ããããã¨ãå¿ããªãã§ãã ãã):
function sayHi() {
phrase = "Hello"; // (*)
if (false) {
var phrase;
}
alert(phrase);
}
sayHi();
ã¾ãããã¹ã¦ã® var ã颿°ã®å
é ã« âæã¡ä¸ãããâ ã¦ããã®ã§ã人ã
ã¯ãã®ãããªæ¯ãèãã âå·»ãä¸ã(hoisting/raising)â ã¨ãå¼ã³ã¾ãã
ãããã£ã¦ãä¸ã®ä¾ã§ã¯ if (false) ã®åå²ã¯æ±ºãã¦å®è¡ããã¾ããããããã¯é¢ä¿ããã¾ããããã®å
å´ã® var ã¯é¢æ°ã®æåã«å¦çãããã®ã§ã(*) ã®æç¹ã§å¤æ°ã¯åå¨ãã¾ãã
宣è¨ã¯å·»ãä¸ãããã¾ãããä»£å ¥ã¯ããã¾ããã
次ã®ã³ã¼ãã¯ãã®ä¾ã§ã:
function sayHi() {
alert(phrase);
var phrase = "Hello";
}
sayHi();
è¡ var phrase = "Hello" ã¯ãã®ä¸ã§2ã¤ã®ã¢ã¯ã·ã§ã³ãæã£ã¦ãã¾ã:
- 夿°å®£è¨
var - 夿°ä»£å
¥
=.
宣è¨ã¯é¢æ°å®è¡ã®éå§æã«å¦çããã¾ã(âå·»ãä¸ãâ)ããä»£å ¥ã¯å¸¸ã«ãããåºç¾ããå ´æã§è¡ããã¾ããå¾ã£ã¦ãã³ã¼ãã¯æ¬è³ªçã«ã¯ãã®ããã«åä½ãã¾ã:
function sayHi() {
var phrase; // 宣è¨ã¯æåã«ããã¾ã...
alert(phrase); // undefined
phrase = "Hello"; // ...代å
¥ - å®è¡ãããã«æ¥ãæã«ããã¾ã.
}
sayHi();
ãã¹ã¦ã® var 宣è¨ã颿°éå§æã«å¦çããããããã©ãããã§ãããããåç
§ãããã¨ãã§ãã¾ãããããã夿°ã¯ä»£å
¥ãããã¾ã§ undefined ã§ãã
ä¸ã®ä¸¡æ¹ã®ä¾ã§ã¯ã alert ã¯ã¨ã©ã¼ãªãåä½ãã¾ãããªããªã夿° phrase ãåå¨ããããã§ãããããããã®å¤ã¯ä»£å
¥ããã¦ããªãã®ã§ã undefied ã表示ãã¾ãã
IIFE(峿å®è¡é¢æ°)
æã¯ var ãããªãããããã¯ã¬ãã«ã®å¯è¦æ§ããªããããããã°ã©ãã¯ãããã¨ãã¥ã¬ã¼ãããæ¹æ³ãèæ¡ãã¾ãããå½¼ããè¡ã£ãã®ã¯ â峿å®è¡é¢æ°(immediately-invoked function expressions)â (IIFEã¨ç¥ãã¾ã) ã¨å¼ã°ãã¾ãã
ããã¯æè¿ã§ã¯ã¤ããã¹ããã®ã§ã¯ããã¾ããããå¤ãã¹ã¯ãªããã§ã¯è¦ã¤ãããã¨ãã§ãã¾ãã
IIFE ã¯ãã®ãããªãã®ã§ãã:
(function() {
let message = "Hello";
alert(message); // Hello
})();
ããã§ã颿°å¼ã¯ä½æãããå¾ãããã«å¼ã°ãã¾ããå¾ã£ã¦ãã³ã¼ãã¯ããã«å®è¡ããèªèº«ã®ãã©ã¤ãã¼ã夿°ãæã¡ã¾ãã
颿°å¼ã¯æ¬å¼§ (function {...}) ã§å²ã¾ãã¦ãã¾ãããªããªããJavaScriptã¯ã¡ã¤ã³ã³ã¼ãããã¼ã®ä¸ã§ "function" ãè¦ã¤ããã¨ã颿°å®£è¨ã®éå§ã¨çè§£ãã¾ãããããã颿°å®£è¨ã¯ååãå¿
é ãªã®ã§ãã¨ã©ã¼ã«ãªãã¾ãã:
// 宣è¨ãè¡ããããã«é¢æ°ãå®è¡ãããã¨ãã¾ã
function() { // <-- SyntaxError: Function statements require a function name
let message = "Hello";
alert(message); // Hello
}();
ã§ã¯é¢æ°å®£è¨ã«ãã¦ååãã¤ããã" ã¨æãããããã¾ããããããã¯åä½ãã¾ãããJavaScriptã§ã¯é¢æ°å®£è¨ãããã«å¼ã¶ãã¨ãã§ãã¾ããã:
// ä¸ã®æ¬å¼§ã«ããæ§æã¨ã©ã¼
function go() {
}(); // <-- 颿°å®£è¨ã¯å³æå¼ã³åºãã§ãã¾ãã
å¾ã£ã¦ã颿°ãå¥ã®å¼ã®ã³ã³ããã¹ãã§ä½ããã¦ããã颿°å¼ã§ãããã¨ã JavaScript ã«ç¤ºãã«ã¯æ¬å¼§ãå¿ è¦ã«ãªãã¾ããååãªãã§ãããã«å¼ã³åºããå¿ è¦ãããã¾ãã
JavaScriptã«ã¯ã颿°å¼ãæå³ããä»ã®æ¹æ³ãããã¾ã:
// IIFE ã®ä½ææ¹æ³
(function() {
alert("颿°ãæ¬å¼§ã§å²ã¿ã¾ã");
})();
(function() {
alert("å
¨ä½ãæ¬å¼§ã§å²ã¿ã¾ã");
}());
!function() {
alert("NOT æ¼ç®åã¯å¼ãéå§ãã¾ã");
}();
+function() {
alert("åé
ãã©ã¹ã¯å¼ãéå§ãã¾ã");
}();
ä¸ã®ãã¹ã¦ã®ã±ã¼ã¹ã§ãç§ãã¡ã¯é¢æ°å¼ã宣è¨ããå¾ããã«å®è¡ãããã¨ãã§ãã¾ãã
ãµããª
let/const ã¨æ¯è¼ãã¦ãvar ã«ã¯å¤§ããªéãã2ã¤ããã¾ã:
var夿°ã¯ãããã¯ã¹ã³ã¼ããæã£ã¦ããããå¯è¦æ§ã¯ç¾å¨ã®é¢æ°ã«ã¹ã³ã¼ãããã颿°å¤ã§å®£è¨ããã¦ããå ´åã«ã¯ãã°ãã¼ãã«ã«ãªãã¾ããvar夿°å®£è¨ã¯é¢æ°éå§æã«å¦çããã¾ãï¼ã°ãã¼ãã«ã®å ´åã¯ã¹ã¯ãªããéå§æï¼
ã°ãã¼ãã«ãªãã¸ã§ã¯ãã«é¢é£ããå°ããªéããããå°ãããã¾ããããã¯æ¬¡ã®ãã£ãã¿ã¼ã§èª¬æãã¾ãã
ãããã®éãã«ãããã»ã¨ãã©ã®å ´å var 㯠let ãããä¸å©ã«ãªãã¾ãããããã¯ã¬ãã«ã®å¤æ°ã¯ã¨ãã¦å½¹ã«ç«ã¡ã¾ãããªã®ã§ãlet ããã¶ãåã«æ¨æºã¨ãã¦å°å
¥ãããä»ã§ã¯ const ã¨ä¸¦ãã§å¤æ°ã宣è¨ããããã®ä¸»è¦ãªææ®µã¨ãªã£ã¦ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã