<h2>tl;博士</h2>
<pre><code>foo = (a, b, c) => `The lazy ${a} ${b} over the ${c}`
</code></pre>
<h2>为什么仅仅模板字符串是不够的</h2>
<p>ES6<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals" rel="noreferrer">template strings</a>提供了一个与pythons字符串格式非常相似的特性。但是,在构造字符串之前,必须知道变量:</p>
<pre><code>var templateString = `The lazy ${bar3} ${bar2} over the ${bar1}`;
</code></pre>
<h2>为什么格式化?</h2>
<p>Python的<code>str.format</code>允许您在</em>之前指定字符串<em>您甚至知道要插入到其中的值,例如:</p>
<pre><code>foo = 'The lazy {} {} over the {}'
bar1 = 'foobar'
bar2 = 'jumped'
bar3 = 'dog'
foo.format(bar3, bar2, bar1)
</code></pre>
<h2>解决方案</h2>
<p>使用<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noreferrer">arrow function</a>,我们可以优雅地包装模板字符串以供以后使用:</p>
<pre><code>foo = (a, b, c) => `The lazy ${a} ${b} over the ${c}`
bar1 = 'foobar';
bar2 = 'jumped';
bar3 = 'dog';
foo(bar3, bar2, bar1)
</code></pre>
<p>当然,这也适用于正则函数,但是arrow函数允许我们将其设为一行。这两种功能在大多数浏览器和运行时中都可用:</p>
<ul>
<li><a href="https://caniuse.com/template-literals" rel="noreferrer">Can I use template literals?</a></li>
<li><a href="https://caniuse.com/arrow-functions" rel="noreferrer">Can I use arrow functions?</a></li>
</ul>