JS中的函数浅析

函数的定义

函数声明函数表达式两种

函数声明

使用function关键字,基本格式如:

function  函数名称(可选参数1,可选参数2,可选参数3,){

}
复制代码

函数定义完之后,并不会自动执行,需要调用才可以执行函数中的代码

函数的调用很简单:函数名(参数),核心就是小括号,如图:


一些细节:

  • 定义函数,需要关键字function,关键字之后和函数名需要空格;
  • 函数名称,和定义变量时规则是一样的,如下: 大小写区分的,在定义普通函数(目前所学的阶段),首字母使用小写,如果有多个单词,仍然遵循小驼峰命名法则;
  • 函数名不要以数字开头,可以使用一些特殊符号,如下划线;
  • 函数名称后面是小括号,必不可少,用来装载形式参数的;
  • {}就是函数体,不能少;

函数表达式


细节:

  • 将function整体,放在赋值运算符的右边,作为表达式来使用。
  • 通过一个变量来引用当前的function,便于后续的调用。
  • 函数名称可以加上,但是只对函数内部起作用,如图:

函数的调用及返回值

关于函数调用,只需要使用小括号就可以了。

关于函数返回值

实际上,在js开发中,我们调用一个函数,往往是需要通过它的处理,得到一个具体的结果。

如果是我们自己定义的函数呢?

此时,我们需要显式的返回一个值。使用return 关键字即可。

对于没有使用return的时候,我们可以这么理解,在一个函数当中,最后一定会有一个return 语句,默认的是 return undefined

函数要返回多个值,可以把多个值放到一个容器中,例如:数组   对象。

return 只能出现在函数中,不要写到函数外面去了 。

函数参数

在定义函数和调用函数时,涉及到两种参数:

  • 形式参数,简称为形参,在定义的时候指定的参数,表示要传入什么样的值;

  • 实际参数,简称为实参,在调用的时候出入的实际参数,具体的某个值;


    参数的传递:

  • 基本数据类型的数据(值传递)

    就是把栈区的数据copy一份给了形参,形参和实参是一个独立一个内存空间。改变形参,实参是没有影响。

  • 引用数据类型的数据(引用传递)

    就是把栈栈区的地址copy一份给了形参,形参和实参同时指向堆区同一个内存空间。 通过形参改变堆区内存空间的数据,实参这个地址应对的数据也会发生改变。

    基本数据类型

引用数据类型

例:

    let a = [1];
    function f(a){
        a[100] = 3;
        a = [1,2,3];
    }
    f(a);
    console.log(a); 
复制代码

解析:

,注意:调用处的a和 function f(a)中的a 是不同的,一个是实参,一个是形参;而在函数内部的 a[100] = 3,是把实参a的第101个位置给3, a = [1,2,3] 是把数据[1,2,3]赋值给形参a。 输出:

函数是另一个函数的参数

第一种写法

<!--定义一个函数,计算两个数的和-->
function add(x,y){
    return x + y;
}
<!--定义一个函数,计算两个数的差-->
function sub(x,y){
    return x- y;
}
function compute(f,a1,a2){
    return f(a1,a2);
}
var rs = compute(add,1,2);
console.log(rs);
var rs = compute(sub,1,2);
console.log(rs);
复制代码

分析:首先定义了两个函数,分别计算两个数的和与差;

compute(add,1,2)是函数的调用处,add是实参,只不过这个实参是一个函数,1,2也是实参;
然后分别把实参传给形参compute(f,a1,a2)中的f,a1,a2;因为f此时是一个函数,所以会返回return f(a1,a2),
然后再把a1,a2的值传递给x,y;然后执行函数,return x + y(这时可以当做3),把3返回给f(a1,a2)(3);
最后f(a1,a2)返回到函数调用处compute(add,1,2),打印出数值。


第二种写法

这是函数表达式写法

let add = function(x,y){
            return x + y;
        }
        let sub = function(x,y){
            return x - y;
        }
         function compute(f,a1,a2){
            return f(a1,a2);
        }
        console.log(compute(add,1,2));
        console.log(compute(sub,1,2));
复制代码

第三种写法,也是最常用的写法

 function compute(f,a1,a2){
        return f(a1,a2);
    } 
     let rs = compute(function(x,y){
        return x + y;
    },1,2);
    console.log(rs); 
复制代码

Arguments对象

arguments 是一个类似数组的对象, 对应于传递给函数的参数。

函数调用的过程就是实参向形参赋值的过程。实参会复制一份给形参。
除了复制一份给形参外,它会给arguments一份。
arguments中收集了实参。 
arguments只是函数内部的属性(类数组), 在函数外面是不能访问的。
arguments和形参这间有一一对应的关系:
    当形参改变了,那么arguments里面的数据也会改变
    当改变了arguments里面的数据,形参也会发生改变
什么时候使用形参,什么时候使用arguments?
    1,当实参非常多时,写一堆的形参来接收,不方便,此时你就可以使用arguments
    2,当实参有特殊含义时,需要有一个特殊的标识,就可以使用形参来标识。
复制代码

箭头函数

作用:简化函数的定义,让我们写函数时更加的方便,快捷。

function f(a,b){
    return a + b;
}
复制代码

可以简写为:

let f = (a,b)=>{
    return a + b;
}
复制代码

特点
1.去掉function关键字,用=>来代替,

2. 如果形参只有一个,()可不写 只有一个形参时,()才能省,其它情况都不省;

let f = (a)=>{
         console.log(a)
     }

可以改写为:

 let f = a=>{
         console.log(a)
     }
     f(2)
复制代码
  1. 如果函数体只有一条语句,{}也可以省,return也需要省。
let f = (a)=>{
         return a;
     }

可以改写为:

let f = (a)=>a;
     console.log(f(2))
复制代码

转载于:https://juejin.im/post/5d306daae51d45775c73dd97

基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
引用主要介绍了JavaScript函数防抖和节流的相关资料。函数防抖是一种常用的前端技术,它能够在某个时间间隔内,只执行最后一次操作,从而避免频繁触发函数。在实际开发,防抖函数常用于处理一些频繁触发的事件,比如用户输入搜索关键字、窗口调整大小等。防抖函数使用定时器来实现,每次触发事件时先清除之前的定时器,然后重新设置一个新的定时器。当一定时间内没有再次触发事件时,定时器会触发执行函数。这样就能够避免频繁触发函数,提升性能和用户体验。 至于你提到的"js 防抖函数ts",是指使用JavaScript编写的防抖函数,但你同时提到了"ts"。如果你的意思是在TypeScript使用防抖函数,那么你可以在TypeScript直接使用JavaScript编写的防抖函数。TypeScript是JavaScript的超集,可以直接使用JavaScript的语法和函数。只需要将JavaScript的代码保存为.ts文件,并使用TypeScript编译器将其编译为JavaScript文件,然后在TypeScript项目引入即可使用。当然,你也可以选择使用TypeScript提供的类型系统和其他特性来增强防抖函数的编写和使用。总之,JavaScript的防抖函数可以在TypeScript直接使用,只需要稍作修改即可适应TypeScript的语法规范。<span class="em">1</span> #### 引用[.reference_title] - *1* [浅析JavaScript 函数防抖和节流](https://download.csdn.net/download/weixin_38609002/12925156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值