{"componentChunkName":"component---src-templates-tags-js","path":"/tags/arrowfunctions/","result":{"data":{"allMarkdownRemark":{"totalCount":1,"edges":[{"node":{"id":"baa8dd42-9c77-5258-9240-0f8f4fca0701","html":"<p>Well for a long time I wanted to write a blog post about migrating Angular 1.x to 2, however, before doing so I thought it is really helpful to write about some prerequisites of that.</p>\n<!--more-->\n<p>This is the second article in ES6 new features series.</p>\n<p><a href=\"/2016/07/06/es6-new-features-part-i/\">Part I</a></p>\n<p><a href=\"/2016/07/11/es6-new-features-part-iii/\">Part III</a></p>\n<h3 id=\"6-arrow-functions-in-es6\" style=\"position:relative;\"><a href=\"#6-arrow-functions-in-es6\" aria-label=\"6 arrow functions in es6 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Arrow Functions in ES6</h3>\n<p>Do you remember the fat functions of CoffeeScript? Now we have them in ES6. An arrow function expression has a shorter syntax compared to function expressions and lexically binds the this value (does not bind its own this, arguments, super, or new.target).</p>\n<p>Arrow functions are always anonymous. The fat arrows are amazing because they would make your <code class=\"language-text\">this</code> behave properly, i.e., <code class=\"language-text\">this</code> will have the same value as in the context of the function—it won’t mutate. The mutation typically happens each time you create a closure.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"16003165213466120000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var a = ['Hydrogen', 'Helium', 'Lithium', 'Beryl­lium']\r\n\r\nvar a2 = a.map(function(s) {\r\n  return s.length\r\n})\r\n\r\nvar a3 = a.map(s => s.length)`, `16003165213466120000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> a <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'Hydrogen'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Helium'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Lithium'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Beryl­lium'</span><span class=\"token punctuation\">]</span>\r\n\r\n<span class=\"token keyword\">var</span> a2 <span class=\"token operator\">=</span> a<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">s</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n  <span class=\"token keyword\">return</span> s<span class=\"token punctuation\">.</span>length\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token keyword\">var</span> a3 <span class=\"token operator\">=</span> a<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">s</span> <span class=\"token operator\">=></span> s<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>The parenthesis <code class=\"language-text\">()</code> are optional for single params in an arrow function signature. You need them when you use more than one param.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"98044621963476930000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var ids = ['56', '5632']\r\nvar messages = ids.map(function(value, index, list) {\r\n  return 'ID of ' + index + ' element is ' + value + ' ' // explicit return\r\n})`, `98044621963476930000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> ids <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'56'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'5632'</span><span class=\"token punctuation\">]</span>\r\n<span class=\"token keyword\">var</span> messages <span class=\"token operator\">=</span> ids<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">,</span> list</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n  <span class=\"token keyword\">return</span> <span class=\"token string\">'ID of '</span> <span class=\"token operator\">+</span> index <span class=\"token operator\">+</span> <span class=\"token string\">' element is '</span> <span class=\"token operator\">+</span> value <span class=\"token operator\">+</span> <span class=\"token string\">' '</span> <span class=\"token comment\">// explicit return</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span></span></pre></div>\n<p>And more eloquent version of the code in ES6 with parenthesis around params and implicit return:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"52802435548369450000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var ids = ['56', '5632']\r\nvar messages = ids.map(\r\n  (value, index, list) => \\`ID of \\${index} element is \\${value} \\`\r\n) // implicit return`, `52802435548369450000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> ids <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'56'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'5632'</span><span class=\"token punctuation\">]</span>\r\n<span class=\"token keyword\">var</span> messages <span class=\"token operator\">=</span> ids<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>\r\n  <span class=\"token punctuation\">(</span><span class=\"token parameter\">value<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">,</span> list</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">ID of </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>index<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> element is </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>value<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> </span><span class=\"token template-punctuation string\">`</span></span>\r\n<span class=\"token punctuation\">)</span> <span class=\"token comment\">// implicit return</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span></span></pre></div>\n<h3 id=\"7-promises-in-es6\" style=\"position:relative;\"><a href=\"#7-promises-in-es6\" aria-label=\"7 promises in es6 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. Promises in ES6</h3>\n<p>Promises have been a controversial topic. There were a lot of promise implementations with slightly different syntax. q, bluebird, deferred.js, vow, avow, jquery deferred to name just a few.</p>\n<p>Promises have been around quite a while and are defined by a spec called Promise/A+. ES6 has adopted this spec for its Promise implementation.</p>\n<p>Promises give us a way to handle asynchronous processing in a more synchronous fashion. They represent a value that we can handle at some point in the future. And, better than callbacks here, Promises give us guarantees about that future value, specifically:</p>\n<ol>\n<li>No other registered handlers of that value can change it (<em>the Promise is immutable</em>)</li>\n<li>We are guaranteed to receive the value, regardless of when we register a handler for it, even if it’s already resolved (<em>in contrast to events, which can incur race conditions</em>).</li>\n</ol>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"45059109411490160000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`// an immediately resolved promise\r\nvar p2 = Promise.resolve('foo')\r\n\r\n// can get it after the fact, unlike events\r\np2.then(res => console.log(res))\r\n\r\nvar p = new Promise(function(resolve, reject) {\r\n  setTimeout(() => resolve(4), 2000)\r\n})\r\n\r\n// handler can't change promise, just value\r\np.then(res => {\r\n  res += 2\r\n  console.log(res)\r\n})\r\n\r\n// still gets 4\r\np.then(res => console.log(res))`, `45059109411490160000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token comment\">// an immediately resolved promise</span>\r\n<span class=\"token keyword\">var</span> p2 <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token string\">'foo'</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token comment\">// can get it after the fact, unlike events</span>\r\np2<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">res</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token keyword\">var</span> p <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n  <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2000</span><span class=\"token punctuation\">)</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token comment\">// handler can't change promise, just value</span>\r\np<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">res</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\r\n  res <span class=\"token operator\">+=</span> <span class=\"token number\">2</span>\r\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">)</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token comment\">// still gets 4</span>\r\np<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">res</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>The standard way to create a Promise is by using the <code class=\"language-text\">new Promise</code> constructor which accepts a handler that is given two functions as parameters. The first handler (<em>typically named</em> <code class=\"language-text\">resolve</code>) is a function to call with the future value when it’s ready; and the second handler (<em>typically named</em> <code class=\"language-text\">reject</code>) is a function to call to reject the Promise if it can’t resolve the future value.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"65075258299958840000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var p = new Promise(function(resolve, reject) {\r\n   if (/* condition */) {\r\n      resolve(/* value */);  // fulfilled successfully\r\n   }\r\n   else {\r\n      reject(/* reason */);  // error, rejected\r\n   }\r\n});`, `65075258299958840000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> p <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n   <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token comment\">/* condition */</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n      <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token comment\">/* value */</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// fulfilled successfully</span>\r\n   <span class=\"token punctuation\">}</span>\r\n   <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\r\n      <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token comment\">/* reason */</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// error, rejected</span>\r\n   <span class=\"token punctuation\">}</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>And with ES6 arrow functions:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"55342785659616390000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var wait1000 = new Promise((resolve, reject) => {\r\n  setTimeout(resolve, 1000)\r\n}).then(() => {\r\n  console.log('Yay!')\r\n})`, `55342785659616390000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> wait1000 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\r\n  <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\r\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Yay!'</span><span class=\"token punctuation\">)</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>Now with a slight modification we can revise that to look like this:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"79848693652363330000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`var wait1000 = () =>\r\n  new Promise((resolve, reject) => {\r\n    setTimeout(resolve, 1000)\r\n  })\r\n\r\nwait1000()\r\n  .then(function() {\r\n    console.log('Yay!')\r\n    return wait1000()\r\n  })\r\n  .then(function() {\r\n    console.log('Wheeyee!')\r\n  })`, `79848693652363330000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> <span class=\"token function-variable function\">wait1000</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span>\r\n  <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span>\r\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token function\">wait1000</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\r\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Yay!'</span><span class=\"token punctuation\">)</span>\r\n    <span class=\"token keyword\">return</span> <span class=\"token function\">wait1000</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\r\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\r\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Wheeyee!'</span><span class=\"token punctuation\">)</span>\r\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<h3 id=\"8-block-scoped-constructs-let-and-const\" style=\"position:relative;\"><a href=\"#8-block-scoped-constructs-let-and-const\" aria-label=\"8 block scoped constructs let and const permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. Block-Scoped Constructs Let and Const</h3>\n<p>ES6 provides two new ways of declaring variables: <code class=\"language-text\">let</code> and <code class=\"language-text\">const</code>, which mostly replace the ES5 way of declaring variables, <code class=\"language-text\">var</code>. <code class=\"language-text\">let</code> works similarly to <code class=\"language-text\">var</code>, but the variable it declares is <em>block-scoped</em>, it only exists within the current block.</p>\n<p><code class=\"language-text\">var</code> is <em>function-scoped</em>. In the following code, you can see that the <code class=\"language-text\">let</code>-declared variable <code class=\"language-text\">tmp</code> only exists with the block that starts in line A:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"10723130158921701000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`function order(x, y) {\r\n  if (x > y) {\r\n    // (A)\r\n    let tmp = x\r\n    x = y\r\n    y = tmp\r\n  }\r\n  console.log(tmp === x) // ReferenceError: tmp is not defined\r\n  return [x, y]\r\n}`, `10723130158921701000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">order</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> y</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">></span> y<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token comment\">// (A)</span>\r\n    <span class=\"token keyword\">let</span> tmp <span class=\"token operator\">=</span> x\r\n    x <span class=\"token operator\">=</span> y\r\n    y <span class=\"token operator\">=</span> tmp\r\n  <span class=\"token punctuation\">}</span>\r\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>tmp <span class=\"token operator\">===</span> x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// ReferenceError: tmp is not defined</span>\r\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">]</span>\r\n<span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p><code class=\"language-text\">const</code> works like <code class=\"language-text\">let</code>, but the variable you declare must be immediately initialized, with a value that can’t be changed afterwards.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"24026929335379866000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`const foo; // SyntaxError: missing = in const declaration\r\n\r\nconst bar = 123;\r\nbar = 456; // TypeError: \\`bar\\` is read-only`, `24026929335379866000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> foo<span class=\"token punctuation\">;</span> <span class=\"token comment\">// SyntaxError: missing = in const declaration</span>\r\n\r\n<span class=\"token keyword\">const</span> bar <span class=\"token operator\">=</span> <span class=\"token number\">123</span><span class=\"token punctuation\">;</span>\r\nbar <span class=\"token operator\">=</span> <span class=\"token number\">456</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// TypeError: `bar` is read-only</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span></span></pre></div>\n<p>Since <code class=\"language-text\">for-of</code> creates one <em>binding</em> (storage space for a variable) per loop iteration, it is OK to <code class=\"language-text\">const</code>-declare the loop variable:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"33474951389505446000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`for (const x of ['a', 'b']) {\r\n  console.log(x)\r\n}\r\n// Output:\r\n// a\r\n// b`, `33474951389505446000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> x <span class=\"token keyword\">of</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'a'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'b'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span>\r\n<span class=\"token punctuation\">}</span>\r\n<span class=\"token comment\">// Output:</span>\r\n<span class=\"token comment\">// a</span>\r\n<span class=\"token comment\">// b</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>The following table gives an overview of six ways in which variables can be declared in ES6:</p>\n<table>\n<thead>\n<tr>\n<th align=\"left\"></th>\n<th align=\"left\">Hoisting</th>\n<th align=\"left\">Scope</th>\n<th align=\"left\">Creates global properties</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"left\"><code class=\"language-text\">var</code></td>\n<td align=\"left\">Declaration</td>\n<td align=\"left\">Function</td>\n<td align=\"left\">Yes</td>\n</tr>\n<tr>\n<td align=\"left\"><code class=\"language-text\">let</code></td>\n<td align=\"left\">Temporal dead zone</td>\n<td align=\"left\">Block</td>\n<td align=\"left\">No</td>\n</tr>\n<tr>\n<td align=\"left\"><code class=\"language-text\">const</code></td>\n<td align=\"left\">Temporal dead zone</td>\n<td align=\"left\">Block</td>\n<td align=\"left\">No</td>\n</tr>\n<tr>\n<td align=\"left\"><code class=\"language-text\">function</code></td>\n<td align=\"left\">Complete</td>\n<td align=\"left\">Block</td>\n<td align=\"left\">Yes</td>\n</tr>\n<tr>\n<td align=\"left\"><code class=\"language-text\">class</code></td>\n<td align=\"left\">No</td>\n<td align=\"left\">Block</td>\n<td align=\"left\">No</td>\n</tr>\n<tr>\n<td align=\"left\"><code class=\"language-text\">import</code></td>\n<td align=\"left\">Complete</td>\n<td align=\"left\">Module-global</td>\n<td align=\"left\">No</td>\n</tr>\n</tbody>\n</table>","timeToRead":3,"frontmatter":{"title":"ES6 new features (Part II)","unformattedDate":"2016-07-07T00:00:00.000Z","date":"Jul 07, 2016","path":"/es6-new-features-part-ii/","author":"Yaser Adel Mehraban","tags":["arrow functions","const","ES6","let","promises"],"thumbnail":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEUUlEQVR42n1UC1BUZRTeQFiB5bkQyEOX177kIUKurgoFZIaBGUUSUDwCQaRhMkUbciwQRkeDkKlhBUZDHiFmk8NMOmklTvIm2aJ4qcW6GOpkubjt7r3367/LYy4++me++e+955zv/8655z883uwC8BSBJeedTyAmiCR4kSCWIIxA+KQY7mINFrNOERrtnypVffN4QWGxKT1zO1JSM5D2Vg6y83YxJeVVd76/1HWB+GUT2M/GWPC4p8zuiwgOHamsoRQKBTYoBczuNCvUvG+HhhIBc7LUninL5+ONjXysCvNhkpLfRsflzhES8/xs/EKlev305+lZ+VDIeFRfo6sJI1IKvwczzPVgYDIUt36UwjASBNxYTt+/IjIdKrCkRN6OOFbXQLiQsUApeUgp2vsRNil4JowFMRiWg+qTQN9DSjgkxanDnkh7yQEYlMDYKwF9VQJMhGD4rBfl62mJppYvdYRjxby6Hy53nVdGLMPdbn8Kahn+JUT0AAkmpBiVoSDZGWUFrsCwDCbyzdRPDusKJGpD0NHgZlqvVGBCo62dU2d3uEI1nhpPFIzLabOCgRmAKNF3i9HdtAwMUcr8JDFjzs76YlhCJ8S4ov5E28AcodOBg9UTmVvsgDFC2Dfr3Cc2k013iWHsF+MB+9w5827oFZuJWbUYkdGpCY74uLJ2lHDZmAupqmtWJ24QAr9JaNaJURPHX6QAq0gtBaWeqSf9M/kxrJ3s7IEUSR2/iunNrMLjbf3zNezsudoSpQzEre+WUri2HMdLliBUwse6MBvUFLtj++tOkPtZo7Hc00yWsskBo2f9iAA5Ji/6UFFKCXr61Ce5vbgt8dVkNJXbU7gTiv25rhB5WaFitzvaq73hIVyErJcdceO8P2o+9IDQ0RI3LwaAtBUaygTUa0mpbOtkcQmXVn964m581GLgdjBTmk8Il1ih9B03/EPSOveZDyLDbZES54DnnrHFlmgB4tbZsT3JxK0nWRxrnCIcXjxuM96797cqKjIK6jPupoqiGRV5JNX9ea54JcYeyhU2iF5li41r7bA62AZpm51xoU5oio19AQaDoYrlaG1tteRx7rC8tr75fqzCGte+8WdqPvBAUYYL2o96o+2IF/ZmuUDzrT8GvhCh4r2nMdkRyKwOscWp0+23SayIe43n7yHZS5K2ZmJfrpUR0yuxLckJO7Y6oThHiIOFbshJdMQBskMfjswEnjEvv4itXeEjd5kzIPharfZSUHA46vYJTLpuOdRtIgyd8YX6tC9GvvaDrlOGPW9amJ6NiYdB/6BtgTLu4qQe0NPbf90/IBCqPdZG3AyiaW2oeUBgTEq9m8QzrlkbDY1Gc4X4Oj+RcMbQOpe6eHBwaCgmNgHRERb0JzttUJrHx0rZYjotfQempqbOER+XR2bh40nnlQp1Ot3Ryqrav9KzCpCduxONLV/9Qb7vIrD+X2WPI+UQkzGDNewkJxA8bH94/QeYyzHWiE3wRQAAAABJRU5ErkJggg=="},"backgroundColor":"transparent","images":{"fallback":{"src":"/static/843eb0f0e2f739a8cf7490c23e695ace/be182/es6.png","srcSet":"/static/843eb0f0e2f739a8cf7490c23e695ace/be182/es6.png 150w","sizes":"(min-width: 150px) 150px, 100vw"},"sources":[{"srcSet":"/static/843eb0f0e2f739a8cf7490c23e695ace/5d458/es6.webp 150w","type":"image/webp","sizes":"(min-width: 150px) 150px, 100vw"}]},"width":150,"height":150}}}}}}]}},"pageContext":{"tag":"arrow functions"}},"staticQueryHashes":[],"slicesMap":{}}