渴望统一 發表於 2020-10-3 16:11:00

Salesforce Javascript(二) 箭头函数

<p>本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions</p>
<p>我们在Salesforce LWC学习(十) 前端处理之 list 处理&nbsp;篇中简单地介绍了一些数组常用的list的方法,其中可以看到(item,index) =&gt; {//TODO}的模式,比如 demo中forEach的写法</p>
<div class="cnblogs_code">
<pre>inputFields.forEach(field =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    field.reset();
});</span></pre>
</div>
<p>前端不好的童鞋(包括我)可能也没有细想,毕竟这个是规范,而且文档就这么写的,就正常用了,深入学习一下,这种模式在js中叫做 箭头函数。</p>
<p>我们在程序中经常声明函数表达式,比如以下两种声明函数的方式。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">第一种</span>
let function_expression = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (]]) {
   statements
};
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">第二种</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> name(]]) {
   
}</span></pre>
</div>
<p>这种函数好处是可重用,但是有时候我们需要的只是完成某种特定功能的一个匿名的函数,不需要其他人调用,这时候我们可以考虑箭头函数,他的优点是比函数表达式更简洁,更适用于在那些本来需要匿名运行的地方,比如 对某一数组进行sort,不对所有的数组sort,只是某个数组 特定的sort,我们更方便写法就是使用箭头函数。比如 integerArray这个数组实现了按照数字大小进行排序。简简单单的一行表达式,便可以将这个功能实现。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.integerArray.sort((a,b) =&gt; a - b);</pre>
</div>
<p>箭头表达式基本概念有了以后,说一下箭头表达式的语法。</p>
<p>&nbsp;1. 全格式写法:全格式写法通常用于参数超过一个,处理逻辑超过1行的情况,我们针对多个参数直接使用逗号分隔,使用()对他们进行维护到一组,然后 =&gt; 以后在花括号{}中进行逻辑语句的书写。</p>
<div class="cnblogs_code">
<pre>(param1, param2, …, paramN) =&gt; { statements } </pre>
</div>
<p>&nbsp;比如下面的例子为校验页面中所有的 input是否满足入力条件,不满足的会在通过checkValidity暴露出来。这里的 reduce方法里面需要添加的就是一个函数,我们在这里就使用箭头函数去搞定这个功能,使整体代码看上去更简洁。两个参数使用()来包含,方法体使用大括号{}来包含逻辑。</p>
<div class="cnblogs_code">
<pre>let allInputList = Array.from(<span style="color: rgba(0, 0, 255, 1)">this</span>.template.querySelectorAll('lightning-input'<span style="color: rgba(0, 0, 0, 1)">));
const allValid </span>= allInputList.reduce((validSoFar, inputFields) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    inputFields.reportValidity();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> validSoFar &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> inputFields.checkValidity();
}, </span><span style="color: rgba(0, 0, 255, 1)">true</span>);</pre>
</div>
<p>2. 当逻辑处理只有一行格式写法:当参数包含一个或者多个,但是逻辑处理只有一行可以考虑以下的写法。</p>
<div class="cnblogs_code">
<pre>(param1, param2, …, paramN) =&gt; expression 这种写法相当于(param1, param2, …, paramN) =&gt;{ <span style="color: rgba(0, 0, 255, 1)">return</span> expression; }</pre>
</div>
<p>下面的例子用于对数字进行升序排序,因为逻辑处理只有一行,所以我们只需要通过表达式方式只有一行即可。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.integerArray.sort((a,b) =&gt; a - b);</pre>
</div>
<p>3. 有一个参数格式写法:参数区域的括号是可选的,可写可不写,都是正确的方式。如果后面的操作逻辑也只有一行,也可以按照2步骤中不写大括号内容{}</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当只有一个参数时,圆括号是可选的:</span>
(singleParam) =&gt; { statements } 等价于singleParam =&gt; { statements }</pre>
</div>
<p>下面的例子用于lwc中输入框的内容重置,因为参数区域只有一个参数,所以可以不用使用括号。</p>
<div class="cnblogs_code">
<pre>const inputFields = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.template.querySelectorAll(
    </span>'lightning-input-field'<span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (inputFields) {
    inputFields.forEach(field </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      field.reset();
    });
}</span></pre>
</div>
<p>下面是来自官方的demo。</p>
<div class="cnblogs_code">
<pre>elements.map(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(element) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> element.length;
}); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回数组:</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 上面的普通函数可以改写成如下的箭头函数</span>
elements.map((element) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> element.length;
}); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> </span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当箭头函数只有一个参数时,可以省略参数的圆括号</span>
elements.map(element =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> element.length;
}); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> </span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当箭头函数的函数体只有一个 `return` 语句时,可以省略 `return` 关键字和方法体的花括号</span>
elements.map(element =&gt; element.length); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> </span></pre>
</div>
<p>除了这种方式的箭头函数,箭头函数也可以有一个简写体或者常见的块体。</p>
<p>比如我们常规的函数写法为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> func = (x, y) =&gt; { <span style="color: rgba(0, 0, 255, 1)">return</span> x + y; }; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">常规编写 明确的返回值</span></pre>
</div>
<p>一个参数使用箭头函数可以省略成</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> func = x =&gt; x * x;   </pre>
</div>
<p>所以来一个进行练习,下面是使用箭头函数声明的函数,常规函数应该写成什么呢?</p>
<div class="cnblogs_code">
<pre>let add = x =&gt; y =&gt; x + y;</pre>
</div>
<p>答案如下:</p>
<div class="cnblogs_code">
<pre>const add = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(x) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(y) {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> x +<span style="color: rgba(0, 0, 0, 1)"> y;
    }
}</span></pre>
</div>
<p>我们想要调用这个方法只需要 add(x)(y) 即可。</p>
<p><strong>总结:</strong>本篇针对js基础薄弱的小伙伴简单地介绍了箭头函数的使用,在我们日常工作中这种写法司空见惯,不过还是要掌握好基础比较好。篇中有错误地方欢迎指出,有不懂欢迎留言。</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>作者:zero</p>
<p>博客地址:http://www.cnblogs.com/zero-zyq/</p>
<p>本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 </p>
<p>如果文章的内容对你有帮助,欢迎点赞~</p>
<p>为方便手机端查看博客,现正在将博客迁移至微信公众号:<strong>Salesforce零基础学习</strong>,欢迎各位关注。</p><br><br>
来源:https://www.cnblogs.com/zero-zyq/p/13762556.html
頁: [1]
查看完整版本: Salesforce Javascript(二) 箭头函数