首页 > 编程语言 >javascript学习 - 函数介绍

javascript学习 - 函数介绍

时间:2024-08-01 19:57:33浏览次数:11  
标签:function 函数 形参 作用域 javascript 学习 num 实参

函数简介

编程时,可能会定义许多相同或者功能相似的代码,此时我们每需要使用一次,就需要重写编写一次。虽然利用循环结构也能够实现一些简单的重复操作,但是功能较为局限。此时,我们就需要使用到 JavaScript 中的函数。

所谓函数,就是通过将一段可以重复调用的代码块进行封装,从而实现代码的重复利用。

函数使用

了解了函数是个啥,接下来就来看看如何使用函数。

函数使用,主要可以分为两步:声明函数调用函数

  • 函数声明

函数声明,也就是说明函数用来干啥的,其语法结构如下:

function 函数名(){
    // 函数体
}

其中 function 是声明函数的关键字,而函数一般是对应某一个功能,所以函数名一般是动词。

  • 函数调用

既然声明了函数,那就要去调用!调用函数时,通过调用其函数名来执行函数体代码,其语法结构如下:

函数名();

以下我们在 JavaScript 中定义一个函数,用于求 1 + 2 + … + num 的值。

function sum(num){
    let result = 0;
    for(let i = 1; i <= num; i++){
        result += i;
    }
    return result;
}

let num = prompt('请输入一个整数');
alert('和为:' + sum(num));

在这里插入图片描述

函数的参数

为了让函数能够准确地实现我们的功能,有时候我们需要用到参数。而参数又分为形参和实参,其中,形参位于声明函数的小括号中,而实参位于函数调用的小括号中。

声明带有参数的函数时,其语法结构如下:

function 函数名(形参1, 形参2……){
    // 函数体
}

当需要调用函数时,则可以通过以下形式调用。

函数名(实参1, 实参2……);

函数声明时,在函数名后的小括号中紧跟一些参数,这些参数被叫做形参,而在函数调用时,同样需要传递对应的参数,而这些参数就叫做实参。两者的区别总结如下:

参数说明
形参形式上的参数,函数定义时传递的参数
实参实际上的参数,函数调用时传递的参数,实参是传递给形参的

所以参数的作用在于,在函数内部某些不能固定的值,可以通过参数在调用函数时传递不同的值进行。

假设我们定义一个函数时,传递了不同数量的参数,就可能出现以下情况。

  • 实参个数与形参个数相匹配
  • 实参个数多于形参个数
  • 实参个数少于形参个数

以下以实例来分别看着三种情况会出现怎样的结果。

function sum(num){
    let result = 0;
    for(let i = 1; i <= num; i++){
        result += i;
    }
    return result;
}

let num = 10;
console.log('和为:' + sum(num));
console.log('和为:' + sum(num, 20));
console.log('和为:' + sum());

在这里插入图片描述

可以看到实参和形参个数匹配时,程序输出了正确的结果,而当实参个数大于形参个数时,程序同样输出了正确的结果。而当实参个数小于形参个数时,程序结果出错。因此,在定义和调用参数时,一定要注意形参和实参的匹配问题,否则可能会导致程序出错。

函数返回值

在调用函数时,我们会希望将函数调用的结果返回到调用者,此时就可以通过关键字 return 语句来实现,其语法结构如下:

function 函数名(形参1, 形参2……){
    // 函数体
    return 返回结果;
}

其实上面的实例中我已经给出了函数的返回值了,其中 result 就是函数的返回值。实例中将函数的结果进行了返回,所以在调用时直接能够直接进行输出。

当然,不是所有函数都需要返回值,具体是否需要要根据自己的实际需求来编写。

作用域

通常来讲,程序中用到的代码并不是一直有效的,而用于限定这个代码可用范围的就是这段代码的作用域。因为作用域的存在,改高了程序逻辑的局部性,增强了可靠性,最大程度上减少了代码中的冲突。

JavaScript 中,主要有三种作用域:

  • 全局作用域
  • 局部作用域
  • 块级作用域
  1. 全局作用域

顾名思义,全局作用域也就是在整个代码中都有效。作用于所有代码执行的环境。

  1. 局部作用域

局部有效,作用于函数内的代码环境,因为和函数息息相关,所以也叫做函数作用域。

  1. 块级作用域

块级作用域由 {} 所包含,比如 iffor 语句中的 {}

let num = 1943;
function demo(num1, num2){
    let tmp = num1;
    num1 = num2;
    num2 = tmp;
}
demo(num, 10);

以上实例中 num 的作用域是全局作用域,num1num2 的作用域为局部作用域,而 tmp 的作用域则是块级作用域。

匿名函数

所谓匿名函数,其实指的就是没有函数名的函数。其语法结构如下,主要有两种定义的方式。

(function (){
    // 函数体
});
(function (){
    // 函数体
});
(function (num1, num2){
    console.log(num1 + num2);
});

以上就是一个简单的匿名函数,要注意匿名函数是不能单独使用的,它通常作为立即执行函数的基础。

为了避免全局变量之间的污染,因此我们有时候需要在定义函数时立即执行函数,这时候我们就可以使用到立即执行函数。立即执行函数是基于匿名函数来实现的,也没有函数名,但是他会在定义后立即执行,其语法结构如下。

立即执行函数也有两种形式,第一种是将匿名函数包裹在一个括号运算符中,然后再跟一个括号。

(function (){
    // 函数体
})();

另一种则是在匿名函数后面跟上一个括号,然后再将整个包裹在一个括号运算符中。

(function (){
    // 函数体
}());
(function (num1, num2){
    console.log(num1 + num2);
}(10, 20));

在这里插入图片描述

但是需要注意的是,如果存在多个匿名函数,那它们之间要用 ; 分隔开,否则将会导致报错。

总结

以上就是本文的所有内容了,主要讲解了关于函数的简介、使用、参数、返回值、作用域以及常用的匿名函数。其中可能有一些小的知识点没有顾虑到,如果有什么遗漏的地方,大家可以指出来,然后根据大家所提的建议进行文章修改,让内容更加详细。

标签:function,函数,形参,作用域,javascript,学习,num,实参
From: https://blog.csdn.net/paofuluolijiang/article/details/140739613

相关文章

  • javascript学习 - 面向对象
    什么是对象之前学习的数据类型在存储一些复杂的信息时,十分不方便,而且也难以区分。为此,为了更加详细方便的描述某一个事物,因而提出面向对象的概念。那什么是对象呢?所谓对象,也是JavaScript中的一种数据类型,可以看做是一系列无序数据的集合。有了对象,就可以用来描述某一......
  • javascript学习 - 数组应用
    什么是数组之前的学习中,如果我们要存储一个值,一般都是通过变量来存储。但如果我们现在想要存储一系列的值,又该如何存储呢,你可能会说可以用多个变量来进行存储。这种方法也可以,但如果你想,一旦值过多,那岂不是就要多个变量,到时候管理就很混乱了。这时候就想,有没有一个可以存储......
  • javascript学习 - 流程控制
    一个程序中,各个代码之间的执行顺序对于程序结果是会造成影响的。就拿下面简单的例子来说,假如我们拿先使用num这个变量然后再定义和先定义变量再使用相比。先使用再定义会报错undefined,而定义再使用就没有问题。也就是说,代码的先后顺序会对我们的程序结果造成直接影响。c......
  • PCIe学习笔记(11)
    TPH规则•TPH指定了两种格式。所有提供TPH的请求都必须使用Baseline(基线)TPH格式。带有可选TPHTLP前缀的格式扩展了TPH字段,为SteetingTag(转向标签,ST)字段提供了额外的位,此时,TLPheaderByte0-3如下图。•可选的TPHTLPPrefix用于扩展TPH字段。◦TPHTLP前缀的存在是......
  • PCIe学习笔记(14)
    Vendor_Defined消息Vendor_DefinedMessages允许扩展PCIExpress消息传递功能,既可以作为PCIExpress规范的一般扩展,也可以作为特定于供应商的扩展。此处定义与这些消息关联的规则。MessageCode数量有限,PCIE协议定义了VDM(VendorDefinedMessage),以此来扩展Message种类。......
  • 当费曼技巧邂逅 AI,强势征服所有学习领域
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    本文通过诺奖获得者费曼的方法加上应用人工智能,用四个简单的步骤可以研究学习任何领域的知识。    你上次遇到一门很难学的科目是什么时候?或者你花了很多时间来看哔哩哔哩视频学习如何更好......
  • golang 如从一个通道(channel)接收数据时在预期时间没接收到,可以使用select语句和time.A
    在Go语言中,如果希望在从一个通道(channel)接收数据时设置超时,可以使用select语句和time.After函数。以下是一个示例代码,演示了如何实现这个功能:packagemainimport("fmt""time")funcmain(){//创建一个通道ch:=make(chanstring)//启动一......
  • [学习笔记] 斜率优化
    引入斜率优化用于求解类似于\(f_i=f_j+a_ib_j+c_i\)使\(f_i\)最大或最小之类的形式的DP转移,标志就是其中有一项(如\(a_ib_j\))与\(i,j\)均有关联。求解令\(j\)为\(i\)的最优决策点,也就是\(f_i=f_j+a_ib_j+c_i\),我们将其进行一些移项可以得到\(f_j=-......
  • javascript: vue create project in WebStorm
     route/index.js import{createRouter,createWebHistory,createWebHashHistory}from'vue-router'importHomeViewfrom'../views/HomeView.vue'importAboutViewfrom"../views/AboutView.vue";constrouter=createRouter(......
  • 重头开始嵌入式第九天(函数)
    今天继续学习字符串viodbzero(void*s,size_tn)功能:将s开始的n个字节,清除为0二维字符数组:一维字符串的数组接下来进入今天的正题,函数。函数 在C语言中,函数是一段用于完成特定任务的独立代码块。下面我们来详细地阐述其特点和基本要素: 函数声明:函数声明明确了......