函数

1.函数概述

什么是函数

使用关键字“function”定义的一段具有独立作用域,能被反复执行的语句块。

函数有什么作用

函数一般用于描述某种功能,实现某种功能。

什么时候会定义函数

1.需要让某段代码反复执行
2.需要封装某种功能,方便调用
3.简化代码

2.函数声明的方式

函数的声明方式,主要有三种

1.利用关键字“function”声明

基本语法格式为:
在这里插入图片描述

2.利用函数表达式进行赋值声明

基本语法格式为:
在这里插入图片描述
注意:这样声明的函数,必须先声明后调用,否则会报错
在这里插入图片描述

3.利用构造函数“Function”声明

基本语法格式为:
var fnName = new Function(paramList , 函数体字符串);
在这里插入图片描述
注意:
1.这种写法是将参数列表和函数体放置在了一起同样作为了参数。
2.如果只有一个参数,那这个参数就是函数体。(就是花括号里面的代码)
3.构造函数内的参数无论有多少个,始终会将其最后一个参数作为函数体去执行
4.参数和函数体的语句要作为字符串去呈现
在这里插入图片描述
提示:重复声明会覆盖
和声明和一个变量一样,在同一个作用域内,若函数重复声明,后声明的函数会覆盖之前声明过的函数,使之前声明过的任何同名函数无效。

3.函数的返回值

1.每一个函数都会有一个返回值,这个返回值可以通过关键字“return”进行设置
2.若未显式地设置函数的返回值,那函数会默认返回一个undefined值
3.但若手动地设置了函数的返回值(return)后,函数将返回开发者手动设置的那个值
4.在函数中,一旦执行完成“return”语句,那么整个函数就结束了,后续语句将不再执行;
5.就是“return”之后的值只能有一个。如果尝试返回多个值,那得到的结果始终是最后一个值
6.如果真的需要函数返回多个值,那就只有将值组合成一个对象或数组进行返回

4.函数的参数

基本概念:
1.函数的参数称为形参与实参
形参:定义函数时写的参数是形参(形式上的参数)
实参:调用函数时传递的参数是实参(实际参数)
函数最终的运算结果由实参所解决定
不论形参还是实参,都不需要关键字“var”的显示声明,函数的参数只能在函数内部访问
对位传参法:
1.形参与实参是通过位置而不是参数名来匹配对应的
2.形参与实参的个数可以不一致
3.如果一个形参没有接收到实参传递来的值,那么他为undefined
对象传参法:
1.当参数非常多时,想要不在通过位置来匹配参数,想让参数具有确定性,那么可以使用对象作为参数,然后就可以通过属性名key来匹配。
在这里插入图片描述
参数默认值
可以给参数设置默认值(es5写法两种,es6一种)
三目运算符
在这里插入图片描述
逻辑或运算符
在这里插入图片描述
存在问题:对于0.-0,null,””,undefined,NaN…逻辑运算结果全为false
2. es6: 在参数列表里面赋值
在这里插入图片描述
Arguments
arguments代表了一个函数的所有参数,他是一个类似数组的东西,可通过下标取值。在我们不知道具体的参数个数时,他尤为有用。
代表函数的所有参数
他是一个类似数组的东西
在这里插入图片描述
在这里插入图片描述

可以通过下标取值

arguments[0]就是第一个参数,arguments[1]就是第二个参数,
在这里插入图片描述
将arguments转换为一个数组
方式一:Array.prototype.slice.call(arguments)
可通过数组原型上得slice方法截取arguments中所有的内容,然后作为一个数组返回,如下
在这里插入图片描述
还可以使用此方法将我们得到的HTML集合或者Node列表转换为一个数组
在这里插入图片描述
方式二:Array.from(arguments)
在这里插入图片描述
也可以使用此方法将我们得到的HTML集合或者Node列表转换为一个数组

Arguments的运用

通过arguments求所有数字参数的和
在这里插入图片描述

5.函数的作用域

(1)什么是作用域?
规定了我们定义的变量在某些范围下才能生效的规则
(2)有哪些作用域?
全局作用域 & 函数作用域 & 块级作用域
全局作用域:在当前文件中的所有函数,块中都有效,不管let还是
函数作用域:只在某个函数里面有效,不管是var或者let都可以
块级作用域:只在if判断、for循环等语句里面有效,需要使用let关键字声明
全局作用域:在当前文件中的所有函数,块中都有效
在这里插入图片描述
函数作用域:只在某个函数里面有效,不管是var或者let都可以
在这里插入图片描述
块级作用域:只在if判断、for循环等语句里面有效,需要使用let关键字声明
var
在这里插入图片描述
在这里插入图片描述
(3)关于let的一些说明
1.let声明的变量具有块级作用域
2.let声明的变量不允许重复声明
3.let声明的变量不会进行变量提升
(4)注意
在es5里面,变量作用域只分为两种类型,一种是“全局作用域”,一种是“函数作用域”。在es6里面才拥有块级作用域,即if判断、for循环等语句都有自己独立的作用域
(5)不同作用域变量的访问问题
① 访问优先级:里层能访问外层,外层不能访问里层
1.块级能访问局部,局部能访问全局,
2.全局不能访问局部,局部不能访问块级
② 访问变量时,先在当前作用域查找,然后在去上层作用域查找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值