概述
这是我的学习笔记,记录了JavaScript的学习过程,我是有一些Python基础的,因此在学习的过程中不自觉的把JavaScript的代码跟Python代码做对比,以便加深印象。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。
今天主要学习函数,主要是声明函数、调用函数、函数表达式、变量和函数提升、默认参数等内容。
1.函数的定义
函数是计算机程序中非常重要的一个概念,它是程序的最小组成单元。函数的主要作用是实现了对过程的封装和对细节的隐藏,使得我们只需关注函数的功能,而不必关注函数体语句是如何编写的。
函数一般会有输入参数并有返回值。参数包括实际参数(实参)和形式参数(形参)。实参是真实传给函数的参数,可以是常量、变量、表达式或函数等。形参是函数名后括号中的变量,只有在函数调用时才实例化(分配内存单元)。
函数根据来源可分为库函数(又叫内置函数)和自定义函数。库函数是编程语言本身提供的函数,自定义函数则是用户根据需要自行设计的函数。自定义函数是我们要学的重点。
总的来说,函数在编程中起到了关键的作用,它使得代码更加模块化,易于理解和维护。通过合理地设计和使用函数,可以极大地提高编程的效率和质量。
2.声明函数与调用函数
我们先举一个简单的例子来更好的理解函数的功能的,比如,把大象放冰箱分几步?1.把冰箱门打开;2.把大象放进冰箱;3.把冰箱门关上。如果把这三个步骤输出,就是如下代码:
console.log("1.把冰箱门打开");
console.log("2.把大象放进冰箱");
console.log("3.把冰箱门关上");
但是如果把小狗放冰箱、把小猫放冰箱,把狮子、老虎放冰箱呢?总不能每次都把这三行代码写一遍,因此就需要用到函数了,我们写一个函数把变量作为参数,然后调用函数把实参传进去就可以了。
在JavaScript中函数声明是用关键字 function来声明的,如下代码示例:
// 声明函数
function putInRefrigerator(something) {
//putInRefrigerator是自定义的函数名,something是形参,可以是任意的
console.log("1.把冰箱门打开");
console.log("2.把" + something + "放进冰箱");
console.log("3.把冰箱门关上");
}
// 调用函数
putInRefrigerator("大象"); // "大象"是实参
console.log("*************");
putInRefrigerator("小狗"); // "小狗"是实参
console.log("*************");
putInRefrigerator("狮子"); // "狮子"是实参
上述代码运行后输出如下图所示:
我们看到已经输出我们想要的内容的了。
函数名后面小括号内为参数,参数可以没有,也可以是多个,如下代码示例:
// 声明没有参数的函数
function sayHello() {
console.log("Hello");
}
// 调用没有参数的函数
sayHello(); //输出:Hello
// 声明有两个参数的函数
function add(a, b) {
//a和b是两个形参
return a + b;
}
// 调用有两个参数的函数
c = add(5, 6); // 5和6是两个实参
console.log(c); //输出:11
PS:在Python中定义函数关键字要用def,如下代码示例是用Python做的代码示例:
# 以下是Python代码
# 声明函数
def putInRefrigerator(something):
#putInRefrigerator是自定义的函数名,something是形参,可以是任意的
print("1.把冰箱门打开")
print("2.把" + something + "放进冰箱")
print("3.把冰箱门关上")
# 调用函数
putInRefrigerator("大象") # "大象"是实参
print("*************")
putInRefrigerator("小狗") # "小狗"是实参
print("*************")
putInRefrigerator("狮子") # "狮子"是实参
# 声明没有参数的函数
def sayHello() :
print("Hello")
# 调用没有参数的函数
sayHello() # 输出:Hello
# 声明有两个参数的函数
def add(a, b) :
#a和b是两个形参
return a + b
# 调用有两个参数的函数
c = add(5, 6); # 5和6是两个实参
print(c); #输出:11
注意,在调用函数的时候,实参可以是实际值,也可以是一个变量。
3.函数表达式
函数表达式是JavaScript中定义函数的一种方式,与函数声明有所不同。函数表达式可以将一个匿名函数或具名函数赋值给一个变量,从而通过该变量来调用函数。
如下代码示例,先定义一个函数add,然后再把这个函数赋值给变量plus,调用的时候直接用plus来调用:
function add(a, b) {
return a + b;
}
var plus = add; //将函数add直接赋值给变量plus,注意add后面没有小括号,不是调用函数
console.log(plus(5, 5)); //直接用plus加括号就可以调用,输出结果为10
匿名函数是指没有名称的函数,如下我们定义一个函数mutip赋值给变量multiply,我们将来调用函数的时候是直接用变量名来调用的,所以函数名mutip就可以省略,这样就是一个匿名函数。
var multiyply = function multip(a, b) { //multip可以省略
return a * b;
};
// 省略multip就形成了匿名函数
var multiply2 = function (a, b) {
return a * b;
};
//调用函数
console.log(multiply2(5, 6)); //输出为:30
4.变量和函数的提升(Hoisting)
提升是指可以让我们在代码里先使用后声明,我可以看如下代码示例:
x = 100; //先赋值
console.log(x); //输出:100
var x; //后定义
代码中我们先使用了变量后面再用关键字进行声明,这样程序是允许的,如果后面没有关键字声明,会提示x是undefined。不过一般情况下不推荐这样写,这样写可读性较差。
不过函数的提升是重要的,我们可以在代码中先调用函数,把函数统一在代码的底部进行声明,这样结构就比较清晰。因为我们在写代码时关注的时逻辑,不关注函数的声明和定义,如果有需要再往下看即可,如下代码演示函数的提升:
console.log(divide(10, 5)); //先调用函数,输出:2
function divide(a, b) {
return a / b;
}
5.默认参数
在定义函数的时候,我们可以函数的参数一个默认值,有默认值的参数是不用传递参数的,如下代码示意:
function greeting(name = "小朋") {
//"小朋"是参数name的默认值
console.log("你好!" + name);
}
//调用函数,不用传递参数,使用默认值
greeting(); //输出:你好!小朋
有默认值的参数也可以传参,传递的参数会把默认值覆盖,如下代码我们调用刚才的函数:
//调用函数,传递参数,会覆盖默认值
greeting("鹏鹏"); //输出:你好!鹏鹏
如果定义的函数有多个参数,只有一个参数有默认值,在调用的时候想使用第一个参数的默认值,那么可以使用undefined传参,如下代码:
function greetingWithWeek(name = "小朋", week) {
console.log("你好!" + name + ",今天是星期" + week);
}
greetingWithWeek(undefined, "三"); //输出:你好!小朋,今天是星期三
注意在Python中定义函数时,如果有多个形参,其中一个形参有默认值,那边就必须把带有默认值的形参放在后面,因为Python中带有默认值的形参后跟的形参也必须有默认,否则会报错,如下是代码示例:
# 以下是Python代码
def greetingWithWeek(week, name1="小朋"):
print("你好!" + name1 + ",今天是星期" + week)
greetingWithWeek("三") # 输出:你好!小朋,今天是星期三
以上便是今天要学习的内容,如果对你有所帮助请点个赞再走吧。