JavaScript函数 -- 第六课

文章目录

  • 前言
  • 一、javaScript函数是什么?
  • 二、使用步骤
    • 1.函数的准备工作
    • 2.函数的参数
    • 3. 函数的返回值
    • 4. 函数进阶
      • 1. 回调函数
      • 2. 递归调用
    • 5.作用域
      • 1. 作用域的分类
      • 2. 全局变量和局部变量的区别
      • 3. 补充知识 -- var和let的区别
    • 6. 预解析
  • 总结


前言

前面我们学习了javaScript的基础语法,下面我们来更进一步的学习一下javaScript的函数吧!


一、javaScript函数是什么?

JavaScript函数是一段可以在需要时被调用的可重复使用的代码块。函数可以接受参数,执行特定的任务,并返回结果。

函数的定义可以使用function关键字来声明,后面是函数名和一对圆括号,圆括号内可以定义函数的参数。函数体则由花括号括起来,并包含了要执行的代码块。

二、使用步骤

1.函数的准备工作

函数在使用时分为两步,声明函数和调用函数

function sayHello(){
	//函数体代码
};
sayHello()//调用函数

2.函数的参数

函数的参数分为形参和实参:

  1. 形参:在声明函数时,在函数名称后面的小括号中添加的一些参数,
  2. 实参: 当函数调用的时候,需要传递相应的参数,这些参数称为实参
function 函数名(形参1,形参2...{//函数声明的小括号中的是形参函数体代码
	函数名(实参1,实参2...)
	函数调用的小括号中的是实参    
}

默认参数

function foo(age=19)
    console.log(age);

}foo();

不定长参数 – arguments

当不确定函数中接收到了多少个实参的时候,可以用arguments来获取实参。这是因为arguments是当前函数的一个内置对象,所有函数都内置了一个arguments对象,该对象保存了函数调用时传递的所有的实参。

function foo(){
    // 字符串将数组变成了字符串,然后进行拼接
    console.log('传递进来的内容是:'+arguments);
    console.log(arguments);     
}
foo(1,2,3,4,5);

3. 函数的返回值

函数的返回值可以将函数的处理结果返回,用于根据函数的执行结果来决定下一步要做的事情,函数的返回值通过return语句实现。

function 函数名(){
	return 要返回的值;//利用return返回一个值给调用者
}

4. 函数进阶

函数表达式:是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,函数表达式的定义必须在调用前

var sum = function(num1,num2){
    //函数表达式return num1 + num2;
};
console.log(sum(12));//调用函数,输出结果:3

1. 回调函数

回调函数:指的就是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。以算术运算为例进行讲解:

function cal(num1, num2, fn) {
	return fn(num1, num2);
}
console. log(cal(45, 55, function (a, b) {
	return a + b;
})); 
console.log(cal(10, 20, function (a, b) {
	return a * b;
}));

2. 递归调用

递归调用:指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数。以根据用户的输入计算指定数据的阶乘为例进行进解:

function factorial(n){
    //定义回调函数
    if(n == 1{
        return 1//递归出
        }
	return n*factorial(n-1;
}var n = prompt('求n的阶乘\n n是大于等于1的正整数,如2表示求2!。');
n = parselnt(n);
if(isNaN(n)){console.log('输入的n值不合法'}
	else{console.log(n +'的阶乘为:'+ factorial(n)):}

5.作用域

1. 作用域的分类

变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域,JavaScript根据作用域使用范围的不同,划分如下:

  1. 全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量
  2. 局部变量:在函数体内利用var关键字定义的变量称为局部变量

2. 全局变量和局部变量的区别

  1. 在全局作用域下,添加或省略var关键字都可以声明全局变量,全局变量在浏览器关闭页面的时候才会销毁,比较占用内存资源
  2. 在函数中,添加var关键字声明的变量是局部变量,省略var关键字时,如果变量在当前作用域下不存在,会自动向上级作用域查找变量。局部变量在函数执行完成后就会销毁,比较节约内存资源

3. 补充知识 – var和let的区别

  1. 作用域:var声明的变量是函数作用域或全局作用域,而let声明的变量是块级作用域。块级作用域是指花括号({})括起来的代码块,例如,if语句或for循环。
function example() {
  var x = 10;
  if (true) {
    var y = 20;
    let z = 30;
    console.log(x); // 输出:10
    console.log(y); // 输出:20
    console.log(z); // 输出:30
  }
  console.log(y); // 输出:20
  console.log(z); // 报错,z未定义
}

在上面的例子中,var声明的变量y在if语句的块级作用域之外仍然可访问,而let声明的变量z只在if语句的块级作用域内有效

  1. 变量提升:在用var声明变量时,变量会被“提升”到所在作用域的顶部,即在声明之前就可以使用。而使用let声明的变量没有变量提升,只能在声明之后才能使用。
console.log(x); // 输出:undefined
console.log(y); // 报错,y未定义
var x = 10;
let y = 20;

在上面的例子中,虽然var声明的变量x在定义之前被打印出来,但是它的值是undefined。而使用let声明的变量y在声明之前的任何地方使用都会报错。

  1. 重复声明:使用var重复声明同一个变量是被允许的,而使用let重复声明同一个变量会报错
var x = 10;
var x = 20; // 合法
console.log(x); // 输出:20

let y = 30;
let y = 40; // 报错,重复声明

在上面的例子中,var声明的变量x可以重复声明并重新赋值,而let声明的变量y重复声明会导致报错。

综上所述,var和let的主要区别在于作用域、变量提升和重复声明的处理。在现代的JavaScript开发中,推荐使用let来声明变量,尽量避免使用var。

6. 预解析

JavaScript解析器在运行JavaScript代码的时候会进行预解析,也就是提前对代码中的var变量声明和function函数声明进行解析,然后再去执行其他的代码。

//输出结果:undefined console.log(num);
var num = 10//报错,提示num2 is not defined 
console.log(num2);0

//预解析
var num;
//undefined 
console. log(num); 
num = 10;

总结

总体来说javaScript函数的难度还是比较小的,新的知识点主要是预解析和变量声明的方式,多花一点时间看看即可!

上一篇:STL之vector-了解


下一篇:数据结构 ——— 单链表oj题:返回链表的中间节点