![ãã€ãã£ãã¢ãžã¥ãŒã«ã«å¯Ÿãããã³ãã©ãšã³ã³ãã€ã©](https://habrastorage.org/getpro/habr/post_images/be1/220/2ad/be12202ad80598308949f8bfe6b8b728.png)
ãã®èšäºã§ã¯ãããã³ããšã³ãéçºè ã®éã§ãŸããŸãè°è«ãããŠããããã€ãã£ãECMAScriptã¢ãžã¥ãŒã«ã«é¢ããèšäºã®ç¿»èš³ãå ±æããããšæããŸã ã Javascriptã¯ãããŸã§ã¢ãžã¥ãŒã«ã§ã®ãã€ãã£ããªäœæ¥ããµããŒãããããšã¯ãªããããã³ããšã³ãã§ããç§ãã¡ã¯ã¢ãžã¥ãŒã«ã䜿çšããããã«åžžã«è¿œå ã®ããŒã«ã䜿çšããå¿ èŠããããŸããã ããããããã«Webpackã䜿çšããŠã¢ãžã¥ãŒã«ãã³ãã«ãäœæããå¿ èŠããªããªãããšãæ³åããŠãã ããã ãã©ãŠã¶ãããªãã®ããã«ãã¹ãŠãåéããäžçãæ³åããŠãã ããã ãããã®èŠéãã«ã€ããŠè©³ãããäŒãããããšæããŸãã
2016幎ã«ã¯ãæ°ããæšæºã®å€ãã®èå³æ·±ãæ©èœãšæçšæ§ããã©ãŠã¶ãŒãšNodejsã«è¿œå ãããŸãããç¹ã«ECMAScript 2015ä»æ§ã§ãã çŸåšããã©ãŠã¶ãŒéã®ãµããŒãã100ïŒ ã«è¿ãç¶æ³ã«çŽé¢ããŠããŸãã
![EcmaScript 6äºææ§ãã£ãŒã](https://habrastorage.org/files/cfe/bcf/4f0/cfebcf4f0aa44d4d81469fb60fdf0625.png)
ãŸãã ECMAScriptã¢ãžã¥ãŒã« ïŒES / ES6ã¢ãžã¥ãŒã«ãšåŒã°ããããšãå€ãïŒãââå®éã«æšæºã«å°å ¥ãããŠããŸãã ããã¯ä»æ§ã®äžã§å¯äžå¿ èŠãªéšåã§ãããå®è£ ã«æãæéãå¿ èŠãšããŸãããå®å®ããããŒãžã§ã³ã§ãªãªãŒã¹ãããŠãããã©ãŠã¶ã¯ãŸã ãããŸããã
Safari 19 Technical PreviewãšEdge 15ã¯æè¿ããã©ã°ãªãã®ã¢ãžã¥ãŒã«å®è£ ãè¿œå ããŸããã ããªãã¿ã®ãã³ãã«ãšã¢ãžã¥ãŒã«ã®ãã©ã³ã¹ãã€ã¬ãŒã·ã§ã³ã®äœ¿çšãæŸæ£ã§ããæãè¿ã¥ããŠããŸãã
ããã³ããšã³ãã®äžçãã©ã®ããã«ãªã£ãã®ããããããç解ããããã«ãJSã¢ãžã¥ãŒã«ã®æŽå²ããå§ããŠã次ã«ES6ã¢ãžã¥ãŒã«ã®çŸåšã®å©ç¹ãšå®è£ ãèŠãŠã¿ãŸãããã
ã¡ãã£ãšããæŽå²
ã¢ãžã¥ãŒã«ãæ¥ç¶ããã«ã¯å€ãã®æ¹æ³ããããŸããã ãããã®æãå žåçãªäŸãæããŸãããã
1.ã¹ã¯ãªããã¿ã°å ã®é·ãã³ãŒãã äŸïŒ
<!--html--> <script type="application/javascript"> // module1 code // module2 code </script>
2.ãã¡ã€ã«éã§ããžãã¯ãåé¢ããã¹ã¯ãªããã¿ã°ã䜿çšããŠããããæ¥ç¶ããŸãã
/* js */ // module1.js // module1 code // module2.js // module2 code
<!--html--> <script type="application/javascript" src="PATH/module1.js" ></script> <script type="application/javascript" src="PATH/module2.js" ></script>
3.é¢æ°ãšããŠã®ã¢ãžã¥ãŒã«ïŒããšãã°ãã¢ãžã¥ãŒã«ã¯äœããè¿ãé¢æ°ã§ããèªå·±åŒã³åºãé¢æ°ãŸãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ïŒ+ã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ããšãªãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã«/ã¢ãã«ïŒ
// polyfill-vendor.js (function(){ // polyfills-vendor code }()); // module1.js function module1(params){ // module1 code return module1; } // module3.js function module3(params){ this.a = params.a; } module3.prototype.getA = function(){ return this.a; }; // app.js var APP = {}; if(isModule1Needed){ APP.module1 = module1({param1:1}); } APP.module3 = new module3({a: 42});
<!--html--> <script type="application/javascript" src="PATH/polyfill-vendor.js" ></script> <script type="application/javascript" src="PATH/module1.js" ></script> <script type="application/javascript" src="PATH/module2.js" ></script> <script type="application/javascript" src="PATH/app.js" ></script>
ããã«å ããŠãããã³ããšã³ãã³ãã¥ããã£ã¯ããã®ç¡ç§©åºã®f宎ã«å€æ§æ§ãå ããå€ãã®çš®é¡ãšæ°ããæ¹æ³ãçºæããŸããã
äž»ãªã¢ã€ãã¢ã¯ã次ã®ããã«ãåäžã®JSãã¡ã€ã«ãªã³ã¯ãç°¡åã«æ¥ç¶ã§ããã·ã¹ãã ãæäŸããããšã§ãã
<!--html--> <script type="application/javascript" src="PATH/app.js" ></script>
ããããããã¯ãã¹ãŠãéçºè ããã³ãã©ãŒã®åŽãã€ãŸãã³ãŒãæ§ç¯ã·ã¹ãã ãéžæãããšããäºå®ã«åž°çããŸããã ããã«ãJavaScriptã®ã¢ãžã¥ãŒã«ã®äž»èŠãªå®è£ ãæ€èšããããšãææ¡ãããŠããŸãã
éåæã¢ãžã¥ãŒã«å®çŸ©ïŒ AMD ïŒ
ãã®ã¢ãããŒãã¯ã RequireJSã©ã€ãã©ãªãšãçµæã®ãã³ãã«ãäœæããããã®r.jsãªã©ã®ããŒã«ã§åºãå®è£ ãããŠããŸãã äžè¬çãªæ§æïŒ
// polyfill-vendor.js define(function () { // polyfills-vendor code }); // module1.js define(function () { // module1 code return module1; }); // module2.js define(function (params) { var a = params.a; function getA(){ return a; } return { getA: getA } }); // app.js define(['PATH/polyfill-vendor'] , function () { define(['PATH/module1', 'PATH/module2'] , function (module1, module2) { var APP = {}; if(isModule1Needed){ APP.module1 = module1({param1:1}); } APP.module2 = new module2({a: 42}); }); });
Commonjs
ããã¯ãNode.jsãšã³ã·ã¹ãã ã®äž»èŠãªã¢ãžã¥ãŒã«åœ¢åŒã§ãã ã¯ã©ã€ã¢ã³ãããã€ã¹ã®ãã³ãã«ãäœæããããã®äž»èŠãªããŒã«ã®1ã€ã¯Browserifyã§ãã ãã®æšæºã®ç¹åŸŽã¯ãã¢ãžã¥ãŒã«ããšã«åå¥ã®ã¹ã³ãŒããæäŸããããšã§ãã ããã«ãããã°ããŒãã«ã¹ã³ãŒãããã³ã°ããŒãã«å€æ°ãžã®æå³ããªãæŒæŽ©ãåé¿ãããŸãã
äŸïŒ
// polyfill-vendor.js // polyfills-vendor code // module1.js // module1 code module.exports= module1; // module2.js module.exports= function(params){ const a = params.a; return { getA: function(){ return a; } }; }; // app.js require('PATH/polyfill-vendor'); const module1 = require('PATH/module1'); const module2 = require('PATH/module2'); const APP = {}; if(isModule1Needed){ APP.module1 = module1({param1:1}); } APP.module2 = new module2({a: 42});
ECMAScriptã¢ãžã¥ãŒã«ïŒå¥åES6 / ES2015 /ãã€ãã£ãJavaScriptã¢ãžã¥ãŒã«ïŒ
ES2015ã䜿çšããŠãã¢ãžã¥ãŒã«ãæäœããå¥ã®æ¹æ³ãæäŸãããŸããã æ°ããæšæºã«ã¯ã次ã®ãããªããã³ããšã³ãã®ããŒãºãæºããæ°ããæ§æãšæ©èœããããŸãã
- åå¥ã®ã¢ãžã¥ãŒã«å¯èŠé å
- ããã©ã«ãã®å³æ Œã¢ãŒã
- 埪ç°äŸå
- ã³ãŒããç°¡åã«ç Žããä»æ§ã確èªããæ©èœ
ãããã®ã·ã¹ãã ã®1ã€ä»¥äžããµããŒãããããŒããŒãã³ã³ãã€ã©ãŒãããã³ã¢ãããŒãã®å®è£ ãå€æ°ãããŸãã äŸïŒ
ããŒã«
ä»æ¥ãJavaScriptã§ã¯ãããŸããŸãªããŒã«ã䜿çšããŠã¢ãžã¥ãŒã«ãçµåããããšã«æ £ããŠããŸãã ECMAScriptã¢ãžã¥ãŒã«ã«ã€ããŠè©±ããŠããå Žåã¯ã次ã®ããããã䜿çšã§ããŸãã
- ããŒã«ã¢ãã
- Traceurã³ã³ãã€ã©
- Babel ãç¹ã«ã ES2015ã¢ãžã¥ãŒã«ãCommonJSã«å€æããããã®ãã©ã°ã€ã³
- Tree Shakingã䜿çšããWebpack 2 ïŒæªäœ¿çšã®ã³ãŒãã®åé€ïŒ
- TypeScript-ãã©ã³ã¹ãã€ã©ãŒãšããŠ
éåžžããã®ããŒã«ã¯ãCLIã€ã³ã¿ãŒãã§ãŒã¹ãšãJSãã¡ã€ã«ãããã³ãã«ãäœæããããã«æ§æããæ©èœãæäŸããŸãã ãšã³ããªãã€ã³ããšäžé£ã®ãã¡ã€ã«ãåãåããŸãã éåžžããã®ãããªããŒã«ã¯ãuse strictããèªåçã«è¿œå ããŸãã ãããã®ããŒã«ã®äžéšã¯ãå¿ èŠãªãã¹ãŠã®ç°å¢ïŒå€ããã©ãŠã¶ãŒãNode.jsãªã©ïŒã§åäœããããã«ã³ãŒããå€æããããšãã§ããŸãã
ãšã³ããªãã€ã³ããèšå®ããBabelã䜿çšããŠJSãã¡ã€ã«ã転眮ããåçŽåãããWebPackæ§æãèŠãŠã¿ãŸãããã
// webpack.config.js const path = require('path'); module.exports = { entry: path.resolve('src', 'webpack.entry.js'), output: { path: path.resolve('build'), filename: 'main.js', publicPath: '/' }, module: { loaders: { "test": /\.js?$/, "exclude": /node_modules/, "loader": "babel" } } };
æ§æã¯äž»ãªéšåã§æ§æãããŠããŸãã
- webpack.entry.jsããå§ããŸã
- ãã¹ãŠã®JSãã¡ã€ã«ã«BabelããŒããŒã䜿çšããŸãïŒã€ãŸããã³ãŒãã¯ããªã»ãã/ãã©ã°ã€ã³ã«å¿ããŠå€æããããã³ãã«ãçæãããŸãïŒ
- çµæã¯main.jsãã¡ã€ã«ã«é 眮ãããŸã
ãã®å ŽåãååãšããŠãindex.htmlãã¡ã€ã«ã«ã¯ä»¥äžãå«ãŸããŸãã
<script src="build/main.js"></script>
ãŸããã¢ããªã±ãŒã·ã§ã³ã¯ãã³ãã«/ãã©ã³ã¹ã³ã³ãã€ã«ãããJSã³ãŒãã䜿çšããŸãã ããã¯ãã³ãã©ãŒãæäœããããã®äžè¬çãªã¢ãããŒãã§ãããã³ãã«ãªãã§ãã©ãŠã¶ãŒã§æ©èœãããæ¹æ³ãèŠãŠã¿ãŸãããã
JavaScriptã¢ãžã¥ãŒã«ããã©ãŠã¶ãŒã§æ©èœãããæ¹æ³
ãã©ãŠã¶ã®ãµããŒã
çŸåšãææ°ã®åãã©ãŠã¶ãŒã¯ES6ã¢ãžã¥ãŒã«ããµããŒãããŠããŸãã
- Firefox-å®è£ æžã¿ãFirefox 54以éã®ãã©ã°ã®äžã§å©çšå¯èœ
- Chrome- éçºäž
- EDGE-å®è£ ãEDGE 15 Preview Build 14342+ã®ãã©ã°ã®äžã§å©çšå¯èœ
- Webkit- å®è£ ãããããã©ã«ãã§Safari Technology Preview 21+ã§å©çšå¯èœ
- Node.js- ä¿çäžãè¿œå ã®ãã£ã¹ã«ãã·ã§ã³ãå¿ èŠ
![](https://habrastorage.org/files/029/a20/b21/029a20b21aa643f1bff736b17a13779d.png)
ã©ãã§ç¢ºèªã§ããŸãã
ã芧ã®ãšãããçŸåšãSafari Technology Preview 19+ããã³EDGE 15 Preview Build 14342+ã§ãã€ãã£ãJSã¢ãžã¥ãŒã«ããã¹ãã§ããŸãã åäœäžã®ã¢ãžã¥ãŒã«ãããŠã³ããŒãããŠè©ŠããŠã¿ãŸãããã
Firefoxã§å©çšå¯èœãªESã¢ãžã¥ãŒã«
Firefox NightlyãããŠã³ããŒãã§ããŸããã€ãŸããã¢ãžã¥ãŒã«ã¯ãŸããªãFF Developer Editionã«è¡šç€ºããããã®åŸå®å®çã®ãã©ãŠã¶ãŒã«è¡šç€ºãããŸãã
ESã¢ãžã¥ãŒã«ãæå¹ã«ããã«ã¯ïŒ
- configã«é¢ããããŒãžãéããŸã
- ããªã¹ã¯ãåãå ¥ããŸãïŒããã¯ãªãã¯ããŸã
- ãã©ã° `dom.moduleScripts.enabled`ãèŠã€ããŸã
- ããã«ã¯ãªãã¯ããŠãã©ã°å€ãtrueã«å€æŽããŸã
ããã§ãFirefoxã§ESã¢ãžã¥ãŒã«ã䜿çšã§ããããã«ãªããŸããã
å©çšå¯èœãªESã¢ãžã¥ãŒã«ãå«ãSafariãã¯ãããžãŒãã¬ãã¥ãŒ
MacOSã䜿çšããŠããå Žåã¯ã developer.apple.comããææ°ã®Safariãã¯ãããžãŒãã¬ãã¥ãŒïŒTPïŒãããŠã³ããŒãããã ãã§ãã ã€ã³ã¹ããŒã«ããŠéããŸãã Safari Technology PreviewããŒãžã§ã³21+以éãESã¢ãžã¥ãŒã«ã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã
Safari TP 19ãŸãã¯20ã®å ŽåãES6ã¢ãžã¥ãŒã«ãæå¹ã«ãªã£ãŠããããšã確èªããŸããã¡ãã¥ãŒã®[éçº]â[å®éšæ©èœ]â[ES6ã¢ãžã¥ãŒã«]ãéããŸãã
![ç»å](https://habrastorage.org/files/6cc/7b5/9b6/6cc7b59b6c3449acbbf4f3f78f4304e2.gif)
å¥ã®ãªãã·ã§ã³ã¯ãææ°ã®Webkit NightlyãããŠã³ããŒãããŠãããã§éã¶ããšã§ãã
EDGE 15-ESã¢ãžã¥ãŒã«ããªã³ã«ãã
Microsoftããç¡æã®ä»®æ³ãã·ã³ãããŠã³ããŒãã§ããŸã ã
ãã©ãããã©ãŒã ãšããŠãMicrosoft EDGE on Win 10 PreviewïŒ15.XXXXXïŒãä»®æ³ãã·ã³ïŒVMïŒãéžæããããšãã°ãVirtual BoxãïŒç¡æïŒãéžæããŸãã
ä»®æ³ãã·ã³ãã€ã³ã¹ããŒã«ããŠèµ·åããEDGEãã©ãŠã¶ãŒãéããŸãã
aboutïŒãã©ã°ããŒãžã«ç§»åãããå®éšçãªJavaScriptæ©èœãæå¹ã«ããããã©ã°ãæå¹ã«ããŸãã
![](https://habrastorage.org/files/157/daf/5ab/157daf5ab9b64a70a97ecb085f4f2055.png)
以äžã§ãECMAScriptã¢ãžã¥ãŒã«ã®ãã€ãã£ãå®è£ ã§éã¶ããšãã§ããããã€ãã®ç°å¢ãã§ããŸããã
ãã€ãã£ãã¢ãžã¥ãŒã«ãšã¢ã»ã³ãã«ã¢ãžã¥ãŒã«ã®éã
ã¢ãžã¥ãŒã«ã®ãã€ãã£ãæ©èœããå§ããŸãããã
- åã¢ãžã¥ãŒã«ã«ã¯ãã°ããŒãã«ã§ã¯ãªãç¬èªã®ã¹ã³ãŒãããããŸãã
- ãuse strictããã£ã¬ã¯ãã£ããæå®ãããŠããªãå Žåã§ãããããã¯åžžã«strictã¢ãŒãã§ãã
- ã¢ãžã¥ãŒã«ã¯ã importãã£ã¬ã¯ãã£ãã䜿çšããŠä»ã®ã¢ãžã¥ãŒã«ãã€ã³ããŒãã§ããŸãã
- ã¢ãžã¥ãŒã«ã¯exportã䜿çšããŠãšã¯ã¹ããŒãã§ããŸãã
ãããŸã§ã®ãšãããç§ãã¡ããã³ãã©ãŒã§æ £ããŠãããã®ãšç¹ã«æ·±å»ãªéãã¯èŠãŠããŸããã 倧ããªéãã¯ããã©ãŠã¶ã§ãšã³ããªãã€ã³ããæäŸããå¿ èŠãããããšã§ãã ç¹å®ã®type = "module"å±æ§ãæã€ã¹ã¯ãªããã¿ã°ãæäŸããå¿ èŠããããŸãã次ã«äŸã瀺ããŸãã
<script type= "module" scr= "PATH/file.js" ></script>
ããã«ãããã¹ã¯ãªããã«ä»ã®ã¹ã¯ãªããã®ã€ã³ããŒããå«ãŸããŠããå¯èœæ§ããããããã«å¿ããŠåŠçããå¿ èŠãããããšããã©ãŠã¶ã«éç¥ãããŸãã ããã«è¡šç€ºãããäž»ãªè³ªåïŒ
ãã¡ã€ã«ãæ¬è³ªçã«ã¢ãžã¥ãŒã«ã§ããå ŽåãJavaScriptã€ã³ã¿ãŒããªã¿ãŒãã¢ãžã¥ãŒã«ãæ€åºã§ããªãã®ã¯ãªãã§ããïŒ
çç±ã®1ã€ã¯ããã€ãã£ãã¢ãžã¥ãŒã«ãããã©ã«ãã§å³æ Œã¢ãŒãã«ãªã£ãŠãããã¯ã©ã·ãã¯ã¹ã¯ãªãããããã§ã¯ãªãããšã§ãã
- ããšãã°ãã€ã³ã¿ãŒããªã¿ãŒããã¡ã€ã«ã解æããŸããããã¯ããããlaxã¢ãŒãã®å€å žçãªã¹ã¯ãªããã§ãããšæ³å®ããŠããŸãã
- 次ã«ã圌ã¯ãã€ã³ããŒã/ãšã¯ã¹ããŒãããã£ã¬ã¯ãã£ããèŠã€ããŸãã
- ãã®å Žåããã¹ãŠã®ã³ãŒããå³å¯ã¢ãŒãã§å床解æããã«ã¯ãæåããéå§ããå¿ èŠããããŸãã
å¥ã®çç±ã¯ãåããã¡ã€ã«ãã¹ããªã¯ãã¢ãŒããªãã§æå¹ã§ãããã¹ããªã¯ãã¢ãŒãã§ã¯ç¡å¹ã§ããå¯èœæ§ãããããšã§ãã ãã®åŸãæå¹æ§ã¯ããããã©ã®ããã«è§£éããããã«ãã£ãŠç°ãªããäºæããªãåé¡ã«ã€ãªãããŸãã
äºæ³ããããã¡ã€ã«ã®ããŠã³ããŒãã®çš®é¡ã決å®ããããšã§ãæé©åããå€ãã®æ¹æ³ãéãããŸãïŒããšãã°ãã€ã³ããŒãããããã¡ã€ã«ã䞊è¡ããŠããŒããã/ HTMLãã¡ã€ã«ã®æ®ãã解æããåã«ïŒ ESã¢ãžã¥ãŒã«çšã®Microsoft Chakra JavaScriptãšã³ãžã³ã§äœ¿çšããã ããã€ãã®äŸãèŠã€ããããšãã§ããŸã ã
Node.jsã§ãã¡ã€ã«ãã¢ãžã¥ãŒã«ãšããŠæå®ããæ¹æ³
Node.jsç°å¢ã¯ãã©ãŠã¶ãšã¯ç°ãªããscriptã¿ã°type = "module"ã®äœ¿çšã¯ç¹ã«é©ããŠããŸããã ãããè¡ãããã®é©åãªæ¹æ³ã«é¢ããŠé²è¡äžã®è°è«ããŸã ãããŸãã
ã³ãã¥ããã£ã«ãã£ãŠããã€ãã®æ±ºå®ãæåŠãããŸããã
- åãã¡ã€ã«ã«ã䜿çšã¢ãžã¥ãŒã«ããè¿œå ããŸãã
- package.jsonã®ã¡ã¿ããŒã¿ã
ä»ã®ãªãã·ã§ã³ã¯ãŸã ä¿çäžã§ãïŒ ãã³ããããããšã@bmeck ïŒïŒ
- ãã¡ã€ã«ãESã¢ãžã¥ãŒã«ãã©ãããå€æããŸãã
- ES6 .mjsã¢ãžã¥ãŒã«ã®æ°ãããã¡ã€ã«æ¡åŒµåã以åã®ããŒãžã§ã³ãæ©èœããªãå Žåã®ãã©ãŒã«ããã¯ãšããŠäœ¿çšãããŸãã
åã¡ãœããã«ã¯é·æãšçæãããã Node.jsãã©ã®æ¹åã«é²ããã«ã€ããŠã®æ確ãªçãã¯ãŸã ãããŸããã
ãã€ãã£ãã¢ãžã¥ãŒã«ã®ç°¡åãªäŸ
ãŸãã ç°¡åãªãã¢ãäœæããŸãããïŒä»¥åã«ã€ã³ã¹ããŒã«ãããã©ãŠã¶ãŒã§å®è¡ããŠãã¢ãžã¥ãŒã«ã確èªã§ããŸãïŒã ãããã£ãŠãããã¯å¥ã®ã¢ãžã¥ãŒã«ãã€ã³ããŒãããããããã¡ãœãããåŒã³åºãåçŽãªã¢ãžã¥ãŒã«ã«ãªããŸãã æåã®ã¹ãããã¯ã次ã䜿çšããŠãã¡ã€ã«ãå«ããããšã§ãã
<script type="module"/>
<!--index.html--> <!DOCTYPE html> <html> <head> <script type="module" src="main.js"></script> </head> <body> </body> </html>
ã¢ãžã¥ãŒã«ãã¡ã€ã«ã¯æ¬¡ã®ãšããã§ãã
// main.js import utils from "./utils.js"; utils.alert(` JavaScript modules work in this browser: https://blog.whatwg.org/js-modules `);
ãããŠæåŸã«ãã€ã³ããŒãããããŠãŒãã£ãªãã£ïŒ
// utils.js export default { alert: (msg)=>{ alert(msg); } };
ãæ°ã¥ããããããŸããããã€ã³ããŒããã£ã¬ã¯ãã£ãã䜿çšããå Žåã.jsãã¡ã€ã«æ¡åŒµåãæ®ããŸããã ããã¯ãã³ãã©ãŒã®åäœãšã¯å¥ã®éãã§ã-ãã€ãã£ãã¢ãžã¥ãŒã«ã¯ããã©ã«ãã§.jsæ¡åŒµåãè¿œå ããŸããã
次ã«ãã¢ãžã¥ãŒã«ã®ã¹ã³ãŒãã確èªããŸãããïŒ demo ïŒïŒ
var x = 1; alert(x === window.x);//false alert(this === undefined);// true
第äžã«ããã€ãã£ãã¢ãžã¥ãŒã«ãããã©ã«ãã§å³æ Œã¢ãŒãã«ãªã£ãŠããããšã確èªããŸãã ããšãã°ãã¹ããªã¯ãã¢ãŒãã¯åçŽãªå€æ°ã®åé€ãçŠæ¢ããŸãã 次ã®ãã¢ã¯ãã¢ãžã¥ãŒã«ã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããšã瀺ããŠããŸãã
// module.js var x; delete x; // !!! syntax error alert(` THIS ALERT SHOULDN'T be executed, the error is expected as the module's scripts are in the strict mode by default `); // classic.js var x; delete x; // !!! syntax error alert(` THIS ALERT SHOULD be executed, as you can delete variables outside of the strict mode `);
å³å¯ãªã¢ãŒãã¯ããã€ãã£ãã¢ãžã¥ãŒã«ã§ã¯ãã€ãã¹ã§ããŸããã
åèšïŒ
- .jsæ¡åŒµåã¯çç¥ã§ããŸããã
- ã¹ã³ãŒãã¯ã°ããŒãã«ã§ã¯ãããŸãã;ããã¯èª°ã«ãèšåããŠããŸããã
- ããã©ã«ãã§å³å¯ã¢ãŒãã®ãã€ãã£ãã¢ãžã¥ãŒã«ïŒãå³å¯ãªäœ¿çšããèšè¿°ããå¿ èŠã¯ãªããªããŸããïŒã
ã¹ã¯ãªããã¿ã°ã®ã€ã³ã©ã€ã³ã¢ãžã¥ãŒã«
éåžžã®ã¹ã¯ãªãããšåæ§ã«ãã³ãŒããåå¥ã®ãã¡ã€ã«ã«åãã代ããã«åã蟌ãããšãã§ããŸãã åã®ãã¢ã§ã¯ãmain.jsãã¹ã¯ãªããã¿ã°type = "module"ã«çŽæ¥æ¿å ¥ããã ãã§ãåãåäœã«ãªããŸã ã
<script type="module"> import utils from "./utils.js"; utils.alert(` JavaScript modules work in this browser: https://blog.whatwg.org/js-modules `); </script>
åèšïŒ
- script type = "module"ã¯ãå€éšãã¡ã€ã«ã®ããŒããšå®è¡ãããã³ã¹ã¯ãªããã¿ã°å ã®ã€ã³ã©ã€ã³ã³ãŒãã®å®è¡ã®äž¡æ¹ã«äœ¿çšã§ããŸãã
ãã©ãŠã¶ãã¢ãžã¥ãŒã«ãããŒãããŠå®è¡ããæ¹æ³
ãã€ãã£ãã¢ãžã¥ãŒã«ïŒéåæïŒã¯ãããã©ã«ãã§ã¹ã¯ãªããã®åäœãç°ãªããŸãã ãããç解ããããã«ãåã¹ã¯ãªããã¿ã°ã¿ã€ã=ãã¢ãžã¥ãŒã«ããdeferå±æ§ãããšãªãã§è¡šãããšãã§ããŸãã åäœã説æããä»æ§ã®ç»åã次ã«ç€ºããŸã ã
![](https://habrastorage.org/files/1b7/a3b/cb7/1b7a3bcb7dfd4b06b413104eb717eb93.png)
ããã¯ãããã©ã«ãã§ã¯ãã¢ãžã¥ãŒã«å ã®ã¹ã¯ãªããã¯ãããã¯ããã䞊è¡ããŠããŒããããããŒãžãHTML解æãå®äºãããšãã«å®è¡ãããããšãæå³ããŸãã ãã®åäœãå€æŽããã«ã¯ãasyncå±æ§ãè¿œå ããŸãããããããšãã¹ã¯ãªãããèªã¿èŸŒãŸãããšããã«å®è¡ãããŸãã
ãã€ãã£ãã¢ãžã¥ãŒã«ãšéåžžã®ã¹ã¯ãªããã®äž»ãªéãã¯ãéåžžã®ã¹ã¯ãªãããããã«èªã¿èŸŒãŸããŠå®è¡ãããhtml解æããããã¯ãããããšã§ãã ãããæ瀺ããã«ã¯ãã¹ã¯ãªããã¿ã°ã®ããŸããŸãªå±æ§ãªãã·ã§ã³ã䜿çšããŠãã¢ãèŠãŠãã ãããdefer\ asyncå±æ§ã®ãªãéåžžã®ã¹ã¯ãªãããæåã«å®è¡ãããŸãã
<!DOCTYPE html> <html> <head> <script type="module" src="./script1.js"></script> <script src="./script2.js"></script> <script defer src="./script3.js"></script> <script async src="./script4.js"></script> <script type="module" async src="./script5.js"></script> </head> <body> </body> </html>
ããŠã³ããŒãã®é åºã¯ããã©ãŠã¶ã®å®è£ ãã¹ã¯ãªããã®ãµã€ãºãã€ã³ããŒãããã¹ã¯ãªããã®æ°ãªã©ã«ãã£ãŠç°ãªããŸãã
åèšïŒ
- ã¢ãžã¥ãŒã«ã¯ããã©ã«ãã§éåæã§ãããé 延ã¹ã¯ãªããã®ããã«åäœããŸã
JavaScriptã§ã®ãã€ãã£ãã¢ãžã¥ãŒã«ãµããŒãã®æ代ã«å ¥ããŸãã JSã¯ã倧ããªæé·ãéããã€ãã«ãã®ç¹ã«å°éããŸããã ããã¯ããããæãæåŸ ããã人æ°ã®ããæ©èœã®1ã€ã§ãã ãã®æ°ããæšæºã«å¹æµããæ§æç³è¡£ãšæ°ããèšèªæ§é ã¯ãããŸããã
äžèšã®ãã¹ãŠã¯ããã€ãã£ãECMAScriptã¢ãžã¥ãŒã«ã®æåã®ç¥ãåãã®ããã«æäŸãããŠããŸãã 次ã®èšäºã§ã¯ãã¢ãžã¥ãŒã«ã®çžäºäœçšããã©ãŠã¶ãŒã§ã®ãµããŒããç¹å®ã®ãã€ã³ããéåžžã®ãã³ãã«ãšã®éããªã©ã確èªããŸãã
ãã£ãšè©³ããç¥ãããå Žåã¯ããªã³ã¯ããã©ãããšããå§ãããŸãã
- ã¢ãžã¥ãŒã«ã¯Dr. ã¢ã¯ã»ã«ã»ã©ãŠã·ã¥ãã€ã€ãŒ
- Domenic Denicolaã«ãã `script type =â moduleâ`ã®ææ¡
- HTMLã©ã€ãæšæºããã¹ã¯ãªãããã»ã¯ã·ã§ã³
æ£çŽãªãšãããç§ãåããŠãã€ãã£ãã¢ãžã¥ãŒã«ãè©ŠããŠãã©ãŠã¶ã§åäœãããšãããã©ãŠã¶ã§çŽæ¥åäœãå§ãããšãã«const / let / arrowé¢æ°ããã®ä»ã®æ°ããæ©èœã®ããããªã©ã®èšèªæ©èœã®å€èŠ³ã«æ°ãã€ããªãäœããæããŸããã ç§ãšåãããã«ããã©ãŠã¶ã§ã¢ãžã¥ãŒã«ãæäœããããã®ãã€ãã£ãã¡ã«ããºã ãè¿œå ããŠããã ããã°å¹žãã§ãã
ãã®ãããã¯ã«é¢ããèè ã®ãã®ä»ã®èšäº
- ãã€ãã£ãECMAScriptã¢ãžã¥ãŒã«ïŒåçã€ã³ããŒãïŒïŒ
- ãã€ãã£ãECMAScriptã¢ãžã¥ãŒã«ïŒç§»è¡çšã®nomoduleå±æ§
- ãã€ãã£ãECMAScriptã¢ãžã¥ãŒã«ïŒæ°æ©èœãšWebpackã¢ãžã¥ãŒã«ãšã®éã
翻蚳è ãã
ç§ã¯Tutu.ruã®èªç©ºããŒã ã®ããã³ããšã³ãéçºè ã§ãã çŸåšãWebpackããããžã§ã¯ãã®ãã³ãã©ãŒãšããŠäœ¿çšããŠããŸãã RequireJSã䜿çšããã¬ã¬ã·ãŒã³ãŒããšå€ããããžã§ã¯ãããããŸãã ãã€ãã£ãã¢ãžã¥ãŒã«ã¯éåžžã«èå³æ·±ããã®ã§ãããç¹ã«ãã¹ãŠã®ãããžã§ã¯ããHTTP / 2ã«æ¢ã«è»¢éããŠããããã楜ãã¿ã«ããŠããŸãã ãã¡ããããã¹ãŠã®ãããžã§ã¯ãã«å€æ°ã®ã¢ãžã¥ãŒã«ãããããããã³ãã©ãŒãªãã§ã¯å®è¡ã§ããŸããã ãããããã€ãã£ãã¢ãžã¥ãŒã«ã®ç»å Žã«ãããã¢ã»ã³ããªãšå±éã®ã¯ãŒã¯ãããŒãå€ããå¯èœæ§ããããŸãã