JavaScript Function
<h1 class="md-end-block md-heading"><span class="md-plain">前言</span></h1><p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s"><code>Js</code><span class="md-plain">中的函数其实相较于其他语言是比较复杂的,光函数类型就分了好几种,其中<span class="md-pair-s"><code>this</code><span class="md-plain">指向更是让很多初学者摸不到头脑。</span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">那么本篇文章将着重介绍一下函数的基本使用,关于<span class="md-pair-s"><code>this</code><span class="md-plain">指向的详解将放在下一章。</span></span></span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">函数的作用其实就是将一段可重复利用的代码进行整合,方便多次使用。</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">一定要注意,先声明定义函数而后再进行使用。这是一种规范。</span></span></p>
</blockquote>
<h1 class="md-end-block md-heading"><span class="md-plain">函数定义</span></h1>
<h2 class="md-end-block md-heading"><span class="md-plain">实例定义</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">在<span class="md-pair-s"><code>Js</code><span class="md-plain">中函数是<span class="md-pair-s"><code>Fuction</code><span class="md-plain">类的实例对象,因此我们可以用实例化的方式来定义函数,这也能充分理解函数也是对象这一概念。</span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><script>
"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 参数1:形参,参数2:函数代码体</span>
<span style="color: rgba(0, 0, 0, 1)">
let func </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Function("title","console.log(title)"<span style="color: rgba(0, 0, 0, 1)">);
func(</span>"云崖先生的博客"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">标准定义</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">使用<span class="md-pair-s"><code>Function</code><span class="md-plain">类的方式定义函数太过麻烦,因此推荐使用<span class="md-pair-s"><code>function</code><span class="md-plain">标准语法进行定义。</span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><script>
"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> func(title){
console.log(title);
}
func(</span>"云崖先生的博客"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">对象字面量</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">我们可以在一个对象中定义函数,这通常会被称之为对象方法。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let obj </span>=<span style="color: rgba(0, 0, 0, 1)"> {
description:</span>"这是一个对象属性"<span style="color: rgba(0, 0, 0, 1)">,
show:</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(title){
console.log(</span>"这是一个对象方法,传入的参数是:"<span style="color: rgba(0, 0, 0, 1)">,title);
},
}
obj.show(</span>"云崖"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">匿名函数</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">全局声明的标准定义函数会被存入<span class="md-pair-s"><code>window</code><span class="md-plain">对象中,这样做会产生很多弊端。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">因为我们的函数名如果不恰当的话可能造成<span class="md-pair-s"><code>window</code><span class="md-plain">方法缺失。</span></span></span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> func(title){
console.log(title);
}
func(</span>"云崖先生的博客"<span style="color: rgba(0, 0, 0, 1)">);
console.log(window.func); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 有的</span>
</script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">因此,可以通过赋值来进行匿名函数的定义,定义前使用<span class="md-pair-s"><code>let/const</code><span class="md-plain">进行声明,这样就不会压入至<span class="md-pair-s"><code>window</code><span class="md-plain">对象中,注意后面要以<span class="md-pair-s"><code>;</code><span class="md-plain">结束。<span class="md-tab"> <span class="md-pair-s"><strong><span class="md-plain">注意:以<span class="md-pair-s"><code>var</code><span class="md-plain">声明的匿名函数会压入至<span class="md-pair-s"><code>window</code><span class="md-plain">对象中</span></span></span></span></span></strong></span></span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let func </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (title) {
console.log(title);
};
func(</span>"云崖先生的博客"<span style="color: rgba(0, 0, 0, 1)">);
console.log(window.func);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">undefined</span>
</script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">函数执行</span></h1>
<h2 class="md-end-block md-heading"><span class="md-plain">函数提升</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">标准定义的函数会进行函数提升,可以先使用后定义,这是不符合规范的。</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">但是匿名函数不会进行函数提升。</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">函数的提升是排在<span class="md-pair-s"><code>var</code><span class="md-plain">变量提升之前的,因此如果函数名与用<span class="md-pair-s"><code>var</code><span class="md-plain">定义的变量重复那么该名字会被变量拿到,函数则会被当做垃圾回收。</span></span></span></span></span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">即使使用了<span class="md-pair-s"><code>var</code><span class="md-plain">来定义匿名函数,也不会进行函数提升, 但是会将该函数压入<span class="md-pair-s"><code>window</code><span class="md-plain">对象中,所以建议使用<span class="md-pair-s"><code>let/const</code><span class="md-plain">来对匿名函数进行接收。</span></span></span></span></span></span></span></span></p>
</blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s"><strong>标准声明函数会进行提升</strong></span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
func(</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)"> func (title) {
console.log(title);
}
console.log(window.func);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 有的</span>
</script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s"><strong>匿名函数不会进行提升</strong></span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
func(</span>"云崖先生的博客");<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Uncaught ReferenceError: Cannot access 'func' before initialization</span>
<span style="color: rgba(0, 0, 0, 1)">
let func </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (title) {
console.log(title);
}
console.log(window.func);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">自执行函数</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">在很早之前,如果你写了一个<span class="md-pair-s"><code>Js</code><span class="md-plain">模块,为了防止全局作用域的污染,你会将代码放入一个自执行函数里面。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">但是现在不用了,因为<span class="md-pair-s"><code>let/const</code><span class="md-plain">具有块作用域,它们的出现决定我们今后写的模块不用再拿自执行函数来进行封装了。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">首先来看一下自执行函数怎么使用。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (title) {
console.log(title);</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, 0, 1)">
})(</span>"云崖先生的博客");<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里调用</span>
</script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s"><strong>自执行函数封装</strong></span></span></p>
<div class="cnblogs_code">
<pre>(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show() {
console.log(</span>"执行了show功能"<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> test() {
console.log(</span>"执行了test功能"<span style="color: rgba(0, 0, 0, 1)">);
}
window.module </span>=<span style="color: rgba(0, 0, 0, 1)"> { show, test };
})();</span></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s"><strong><span class="md-pair-s"><code>let</code><span class="md-plain">作用域封装</span></span></strong></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
let show </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
console.log(</span>"执行了show功能"<span style="color: rgba(0, 0, 0, 1)">);
}
let test </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
console.log(</span>"执行了test功能"<span style="color: rgba(0, 0, 0, 1)">);
}
window.module </span>=<span style="color: rgba(0, 0, 0, 1)"> { show, test };
};</span></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-pair-s "><strong>调用</strong></span></span></p>
<div class="cnblogs_code">
<pre><script src="JavaScript.js"></script>
<script><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注意上面要引入模块</span>
"use strict"<span style="color: rgba(0, 0, 0, 1)">;
module.show();
module.test();
</span></script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">参数相关</span></h1>
<h2 class="md-end-block md-heading"><span class="md-plain">形参实参</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">形参是在函数声明时设置的参数,实参指在调用函数时传递的值,注意,传参时必须一一对应!</span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">形参数量大于实参时,没有传参的形参值为 <span class="md-pair-s"><code>undefined</code></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">实参数量大于形参时,多于的实参将忽略并不会报错</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">使用<span class="md-pair-s"><code>函数名.length</code><span class="md-plain">可获取需要传递形参的数量</span></span></span></span></p>
</blockquote>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> test(f1, f2, f3) {
console.log(f1);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第一个</span>
console.log(f2);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第二个</span>
console.log(f3);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> undefined</span>
<span style="color: rgba(0, 0, 0, 1)">
}
test(</span>"第一个","第二个"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">默认形参</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">默认形参要放在最后,当没有实参传递时采用默认形参的值,当有实参传递时采用实参传递的值。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> test(f1, f2, f3) {
f3 </span>= f3 || "默认形参";<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 老版设置默认形参的方式</span>
console.log(f1);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第一个</span>
console.log(f2);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第二个</span>
console.log(f3);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 默认形参</span>
<span style="color: rgba(0, 0, 0, 1)">
}
test(</span>"第一个","第二个"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 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, 0, 255, 1)">function</span> test(f1, f2, f3="默认形参"<span style="color: rgba(0, 0, 0, 1)">) {
console.log(f1);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第一个</span>
console.log(f2);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第二个</span>
console.log(f3);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 默认形参</span>
<span style="color: rgba(0, 0, 0, 1)">
}
test(</span>"第一个","第二个"<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">函数参数</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">函数本身也可当做一个参数传递给另一个函数。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> f1(func) {
console.log(</span>"f1..."<span style="color: rgba(0, 0, 0, 1)">);
console.log(</span>"参数:"<span style="color: rgba(0, 0, 0, 1)">,func);
func(</span>"给f2传递的参数"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行f2</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> f2(y) {
console.log(</span>"f2"<span style="color: rgba(0, 0, 0, 1)">);
console.log(</span>"参数:"<span style="color: rgba(0, 0, 0, 1)">,y);
}
f1(f2);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">arguments</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">当某个函数要接收无限多的参数时,可不指定形参,使用<span class="md-pair-s"><code>arguments</code><span class="md-plain">来进行接收(必须是这个名字)。</span></span></span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">注意:<span class="md-pair-s"><code>arguments</code><span class="md-plain">是<span class="md-pair-s"><code>Arguments</code><span class="md-plain">对象,并不是一个数组。但是我们可以将它转换为数组再进行操作</span></span></span></span></span></span></p>
</blockquote>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show() {
console.log(arguments );
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Arguments(6) </span>
<span style="color: rgba(0, 0, 0, 1)">
}
show(</span>1,2,3,4,5,6<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h2 class="md-end-block md-heading"><span class="md-plain">...语法</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">当形参要接收无限多的参数时,可在形参名前加入<span class="md-pair-s"><code>...</code><span class="md-plain">,使用进行接收。该形参会作为一个<span class="md-pair-s"><code>Array</code><span class="md-plain">对象接收无限多的参数。</span></span></span></span></span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">这个是更推荐使用的方式</span></span></p>
</blockquote>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show(...args) {
console.log(args );
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> (6) </span>
<span style="color: rgba(0, 0, 0, 1)"> }
show(</span>1,2,3,4,5,6<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">当实参是一个数组或者类数组的数据类型时,可以使用<span class="md-pair-s"><code>...</code><span class="md-plain">语法来为形参一一对应传参。但是要注意,严格模式下不允许这样做。</span></span></span></span></p>
<div class="cnblogs_code">
<pre><script><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "use strict"; 严格模式下不能这么做</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show(f1,f2,f3,f4,f5,f5) {
console.log(f1);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1</span>
console.log(f2);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2</span>
console.log(f3);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 3</span>
console.log(f4);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 4</span>
console.log(f5);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 5</span>
<span style="color: rgba(0, 0, 0, 1)"> }
show(...[</span>1,2,3,4,5,6<span style="color: rgba(0, 0, 0, 1)">]);
</span></script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">箭头函数</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">箭头函数是函数声明的简写形式,在使用递归调用、构造函数、事件处理器时不建议使用箭头函数。</span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">无参数时使用空扩号即可,代码块过于简短可省略花括号。</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">函数体为单一表达式时不需要 <span class="md-pair-s"><code>return</code><span class="md-plain"> 返回处理,系统会自动返回表达式计算结果。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">多参数传递与普通声明函数一样使用逗号分隔</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">只有一个参数时可以省略参数括号。</span></span></p>
</blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">无参数时使用空扩号即可,代码块过于简短可省略花括号。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let show </span>= () => console.log("执行了"<span style="color: rgba(0, 0, 0, 1)">);
show();
</span></script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">函数体为单一表达式时不需要 <span class="md-pair-s"><code>return</code><span class="md-plain"> 返回处理,系统会自动返回表达式计算结果。</span></span></span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let show </span>= () => "你真帅"<span style="color: rgba(0, 0, 0, 1)">;
const res </span>=<span style="color: rgba(0, 0, 0, 1)"> show();
console.log(res);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 你真帅</span>
</script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">多参数传递与普通声明函数一样使用逗号分隔</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let show </span>= (f1, f2, f3) =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(f1);
console.log(f2);
console.log(f3);
};</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, 0, 1)">
show(</span>"第一", "第二", "第三"<span style="color: rgba(0, 0, 0, 1)">)
</span></script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">只有一个参数时可以省略参数括号。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let show </span>= f1 =><span style="color: rgba(0, 0, 0, 1)"> console.log(f1);
show(</span>"第一")<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 第一</span>
</script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">递归调用</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">递归指函数内部调用自身的方式。</span></span></p>
<blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">主要用于数量不确定的循环操作</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">要有退出时机否则会陷入死循环</span></span></p>
</blockquote>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">以下示例将展示使用递归进行累加操作。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show(num) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">num) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> 0<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> num + show(num - 1<span style="color: rgba(0, 0, 0, 1)">);
}
let res </span>= show(100<span style="color: rgba(0, 0, 0, 1)">);
console.log(res);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 5050</span>
</script></pre>
</div>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">以下示例将展示使用递归打印倒三角。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show(num) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">num) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
}
console.log(</span>"*"<span style="color: rgba(0, 0, 0, 1)">.repeat(num));
show(num </span>- 1<span style="color: rgba(0, 0, 0, 1)">);
}
show(</span>5<span style="color: rgba(0, 0, 0, 1)">);
</span></script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">回调函数</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">回调函数是指在某一特定情况下会被其他函数所调用的函数,比如处理鼠标事件,键盘事件的函数都是回调函数。</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 回调函数</span>
document.querySelector("div").addEventListener("click",(event)=> console.log(event.target));<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 由于this指向不同,所以我们使用event.target进行打印</span>
</script></pre>
</div>
<h1 class="md-end-block md-heading"><span class="md-plain">标签函数</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">当使用模板字面量对字符串进行格式化时,可指定一个标签函数。第一个参数是字符串值的数组,其余的参数为标签变量。</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">注意!标签函数会自动执行!</span></span></p>
<div class="cnblogs_code">
<pre><script>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> show(str, ...args) {
console.log(str);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> (3) ["姓名是:", "↵年龄是:", "", raw: Array(3)]</span>
console.log(args);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> (2) ["云崖", 18]</span>
<span style="color: rgba(0, 0, 0, 1)">
}
let username </span>= "云崖"<span style="color: rgba(0, 0, 0, 1)">;
let age </span>= 18<span style="color: rgba(0, 0, 0, 1)">;
let str </span>=<span style="color: rgba(0, 0, 0, 1)"> show`姓名是:${username}\n年龄是:${age}`;
</span></script>
</pre>
</div><br><br>
来源:https://www.cnblogs.com/Yunya-Cnblogs/p/13407441.html
頁:
[1]