JavaScrpit函数

ppgo8 于 2023-03-15 发布

函数

为什么需要函数?

函数:function,是被设计为执行特定任务的代码块

说明:函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势是有利于精简代码方便复用

比如我们前面使用的alert()、prompt()和console.log()都是一些js函数,只不过已经封装好了,我们直接使用。


1.为什么需要函数?

可以实现代码复用,提高开发效率

2.函数是什么

function执行特定任务的代码块

函数使用

函数的声明语法

function 函数名() {
    函数体     
}

函数命名规范

  1. 和变量命名基本一致

  2. 尽量小驼峰式命名法

  3. 前缀应该为动词

  4. 命名建议:常用动词约定

    image-20230314090453150

函数的调用语法

// 函数调用,这些函数体内的代码逻辑会被执行
函数名()

注意,声明(定义)的函数必须调用才会真正的执行,使用()调用函数。

函数体

函数体是函数的一部分。

image-20230314090831162


总结

1.函数的声明关键字:function

2.函数不调用不会执行,调用函数方式:函数名()

3.函数的复用和循环重复代码有什么不同?

函数传参

传参基本语法

声明语法

function 函数名(参数列表){  //形参
	函数体
}

参数列表:

调用语法

函数名(传递的参数列表)   //实参
// 实参的类型
// 字面量
// 变量
// 变量 = 值的形式

调用函数时,需要传入几个数据就写几个,用逗号隔开


总结

1.函数传参的好处:极大的提高了函数的灵活性

2.函数参数可以分为哪两类?怎么判断是哪种参数?

3.参数之间用什么分割?逗号

参数默认值

function getSum(num1,num2){
    document.write(num1+num2)
}
getSum()  //相当于声明了一点变量没给值,结果是udefined + undefined = NaN

因此,如果用户不输入实参,上述的案例会变成NaN的值。如何解决这个问题?

改进:如果用户不输入值,那么给形参一个默认值

function getSum(num1 = 0,num2 = 0){  
    document.write(num1+num2)
}
getSum()  //结果是0
// 如果调用时传递了参数,则不会使用默认值;
这个默认值只有在缺少实参传递时才会执行,

所以有参数会优先执行传递进来的实参,否则默认为undefined。

函数返回值

什么是函数?

函数是执行特定任务的代码块

执行完特定任务之后呢?

把任务的结果返回给操作者。

缺点:把计算后的结果处理方式写死了,内部处理了

优点:把处理结果返回给调用者

有返回值函数的概念:

当然有很多函数没有返回值,所以要根据需求,来设定有没有返回值

返回值语法

当函数需要返回数据时,用return关键字

//语法
return 数据

细节


总结

1.为什么要让函数有返回值

2.函数返回使用哪个关键字?注意事项

3.返回值返回给了谁?

4.发生了错误,去console控制台里面看错误。

5.断点:Sources——Pages点击哪行就在哪里有断点。

函数细节补充

作用域

基本概念

image-20230315152647527

​ 通常来说,一段程序代码中所用的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是作用域

​ 作用域的使用提高了程序逻辑的局部性,增加了的可靠性,减少了名字的冲突。比如写多个for循环都写i,但是之间不冲突,很好。

image-20230315152911109

根据作用域的不同,变量可以分为:

变量特殊情况

总结

1.JS作用域分那两种?

2.根据作用域不同,变量分为哪两种?

3.有一种特殊情况的全局变量是那种?提倡吗?

变量访问原则

image-20230315155611289

image-20230315154719581

匿名函数

函数分类:

没有名字的函数,没办法直接使用。使用的方式有两种:函数表达式和立即执行函数

函数表达式

将匿名函数赋值给一个变量,并且通过变量名的名称进行调用。称这个方法为函数表达式。

//声明语法
let 变量名 = function(形参列表) { 
    //函数体
}
//调用语法
变量名(实参列表)

和具名函数的区别?

函数表达式之后在Web API中用的较多

立即执行函数

场景介绍:避免全局变量之间的污染

// 方式1
(function(形参){函数体})(实参);
//写法教学
// 1.先写两个小括号,然后填充 ()()
// 2.function(){}写道第一个小括号里面
// 3.然后在上面的大括号中写函数
// 4.立即执行函数须加分号(;)  分号可以加到前面或后面

// 方式2
(function(形参){函数体}(实参));

总结

1.立即执行函数作用?防止变量污染

2.立即执行函数需要调用吗?注意事项?

逻辑中断

逻辑中断介绍

//为了避免调用出bug,所以这里给了形参默认值
function fn(x = 0, y = 0) {
    console.log(x + y)
}

上述方式可以更改为逻辑中断的写法

image-20230315171635169

//另一种避免bug的写法:逻辑中断
 function fn(x, y) {
     x = x || 0     //undefined在逻辑运算中当假看;若为真,直接中断
     y = y || 0
     console.log(x + y)
 }

示例,逻辑或中断

image-20230315171804957

转换为布尔型

显示布尔转换

//显示转换
Boolean()
//在有些判断条件中,会进行隐式转换成布尔类型

image-20230315172614513

其他隐式转换总结

image-20230315172949987

注意4.undefine进行任何数字操作都是NaN。但是在判断操作中就是True或者False