JavaScript基础——函数

news2024/12/22 0:24:07

函数简介

定义函数

调用函数

函数的参数和返回值

函数参数

1.有形参情况下不传递实参

 2.传递数量少于形参个数的实参

3.传递数量等于形参个数的实参

函数返回值

报错Uncaught SyntaxError: Illegal return statement

返回数字和字符串

返回数组、对象和函数

没有返回值

多个return语句

函数作用域

全局作用域

局部作用域

​编辑

函数传参补充

不能直接使用函数内部的参数

不传递实参直接使用函数

传递实参数量多于形参


函数简介

        在JavaScript中,函数是指可以实现特定功能、重复使用的代码块。

定义函数

        在JavaScript中,用关键字function封装函数。定义函数有三种写法,分别如下:

    <script>
        // 1) 用function声明sayHello函数
        function sayHello() {
            console.log('hello');
        }

        // 2) 定义变量接收函数
        var sayHello2 = function () {
            console.log('hello2');
        }

        // 3)构造函数
        var sayHello3 = new Function('console.log("hello3")');
    </script>

        定义一个函数,输出日常生活的句子,代码如下:

        // 1)定义函数
        function foo() {
            console.log("-----日常生活---------")
            console.log("起床")
            console.log("吃早餐")
            console.log("上课/上班")
            console.log("午休")
            console.log("上课/上班")
            console.log("下班")
            console.log("加班")
            console.log("回家睡觉")
            console.log("----------------------")
        }

        再定义一个计算N-M之间随机整数的函数,代码如下:

        function getRandomNum(N, M) {
            return Math.floor(Math.random() * (M - N + 1) + N);
        }

        其他获取随机数的代码可以参考博客:JavaScript基础——数学对象-CSDN博客

调用函数

        使用函数的步骤分为定义函数、调用函数,函数必须要调用,代码块才能执行。调用函数的语法如下:

函数名称(参数[可为空]);

        调用我们上面定义的foo函数,代码如下:

        // 2)调用函数
        foo();

函数的参数和返回值

        在JavaScript中,函数可以函数可以接收参数,执行相应的操作,并返回结果,参数和返回是自定义的。

函数参数

        定义函数时,可以在函数名称后面用()定义参数,记作:

    function 函数名(参数1,参数2,...参数n){
    代码块;
}

        函数名后括号内的参数称为形式参数,简称形参,调用函数时传递的参数,称为实际参数,简称实参。

    //定义函数
    function 函数名(形参1,形参2,...形参n){
    代码块;
}
    // 调用函数
    函数名(实参1,实参2,...实参3);

        函数传递参数的过程可以理解为将变量赋值,相当于赋值操作,如图:

         

        函数可以定义零个或多个参数,语法如下:

        // 含参(带有参数)的函数
        function getRandomNum(N, M) {
            return Math.floor(Math.random() * (M - N + 1) + N);
        }

        // 不含参(不带有参数)的函数
        function sayHello() {
            console.log('hello');
        }

        调用函数时,可以传递与参数数量相等或更少的参数(如果函数定义了默认参数值,则返回默认值,如果没有定义默认值,则返回undefined)。

        定义add函数,设置两个参数a和b,a没有默认值,b有默认值2。

        function add(a, b = 2) {
            console.log("a:" + a, "b:" + b);
        }

        分为以下情况传递参数:

1.有形参情况下不传递实参

        在不传递参数的情况下,如果函数有默认值,则传递默认值,如果没有默认值,则传递undefined,代码输出a:undefined b:2

 2.传递数量少于形参个数的实参

        函数会将参数给按顺序传递,只传递一个参数,就会值传递给第一个形参,也就是a,第二个参数b有默认值,所以b被赋值默认值2,代码输出a:1 b:2

3.传递数量等于形参个数的实参

        函数会将参数给按顺序传递,传递的实参数量和形参相等,a被赋值1,b被赋值3,代码输出a:1 b:3

        function add(a, b = 2) {
            console.log("a:" + a, "b:" + b);
        }
        add(1, 3);

        整体代码

        function add(a, b = 2) {
            console.log("a:" + a, "b:" + b);
        }
        add();
        add(1);
        add(1, 3);;

函数返回值

        函数可以使用return关键字来返回一个值,这个值可以是数字、字符串、布尔值等基本数据类型,也可以是对象、数组等引用数据类型,还可以返回一个表达式、函数等。

        return后面的值就是返回值,就是函数调用后返回的结果。调用函数,函数执行操作后,才能得到返回值。

        return有返回值作用,也有终止代码的作用,写多个return语句,只会返回第一个返回值。

报错Uncaught SyntaxError: Illegal return statement

        return语句只能在函数作用域中使用,不能在全局环境下使用,否则会报错Uncaught SyntaxError: Illegal return statement,意思是非法返回语句,因为在全局环境下不能定义返回语句。

返回数字和字符串

        定义两个函数,分别返回数字和字符串,调用函数在控制台输出返回值,查看返回值的类型,可以发现是number和string类型。

        // 返回值为数字的函数
        function returnNum() {
            return 1;
        }
        console.log(returnNum());
        // 返回值为字符串的函数
        function returnStr() {
            return 'hello';
        }
        console.log(returnStr());
        console.log(typeof returnNum());
        console.log(typeof returnStr());

返回数组、对象和函数

        返回数组、对象和函数,可以得到返回的数据,检测类型,分别为对应的类型,访问数组的第一个数据,对象的指定属性,调用函数。

        // 返回数组
        function returnArr() {
            return [1, 2, 3];
        }
        console.log(returnArr());
        console.log(typeof returnArr());
        // 获得数组第一个元素
        console.log(returnArr()[0]);

        // 返回对象
        function returnObj() {
            return {
                name: '张三',
                age: 18
            }
        }
        console.log(returnObj());
        console.log(typeof returnObj());
        // 获得对象的name属性
        console.log(returnObj().name);

        // 返回函数
        function returnFun() {
            return function () {
                console.log('hello');
            }
        }
        returnFun()();

没有返回值

        如果没有使用return,函数默认返回undefined。

        // 没有返回值
        function sayHello() {
            var a = 1;
        }
        console.log(sayHello())

多个return语句

        return有返回值作用,也有终止代码的作用,写多个return语句,只会返回第一个返回值。

函数作用域

        函数作用域是指变量和函数声明在代码中可见的区域,就是代码可执行的环境。函数作用域包括全局作用域和局部作用域。

全局作用域

        在全局环境下(函数外部)声明的变量是全局变量,是可以被共享的。 

        在全局环境下定义一个变量num,值为100,可以输出变量num的值,定义函数f()输出num,函数f()也可以输出num的值。

局部作用域

        在函数内部声明的变量是局部变量,是私有的,只能在函数内部被访问(使用)。

        在不同的函数内部定义一个局部变量count,对变量进行不同的操作(给第一个函数进行+100的操作,第二个函数进行-100的操作),可以发现变量的操作是相互独立的,也就是说变量之间的操作不会冲突,因为局部变量是私有的。

        在全局环境下输出变量,会报错ReferenceError: count is not defined,意思是count变量未定义,这是因为定义在局部的变量在全局环境下不存在,局部变量不能在全局环境下使用。

        整体代码

        // 定义变量
        var num = 100; // 全局变量/全局作用域(共享)
        console.log(num);

        function f() {
            console.log(num);
        }

        f();

        // 函数作用域:代码块可执行的环境 { }
        function foo() {
            // 局部变量(私有)
            var count = 200;
            count -= 100;
            console.log(count);
        }
        // 调用函数
        foo();

        // 局部变量不会冲突
        function boo() {
            // 局部变量(私有)
            var count = 200;
            count += 100;
            console.log(count);
        }
        // 调用函数
        boo();

        // 因为全局环境下根本没有 count 这个变量
        console.log(count);  // undefined

函数传参补充

        前面我们提到,函数名后的参数称为形参(形式参数),调用函数时传入的参数称为实参(实际参数),实参和形参是一一对应的,接着结合作用域进行补充。

        传递参数可以让代码块的使用更灵活

不能直接使用函数内部的参数

        定义函数num(a),此时a和b是形参,是局部变量,只能在函数作用域中使用,也就是说,在全局环境下我们不能在未定义的情况下,直接使用a,会报错ReferenceError: a is not defined,意思就是a没有定义,全局环境下没有a这个变量。有形参,没有传递实参,形参缺少值,是undefined。

不传递实参直接使用函数

        定义函数add(a,b),不传入参数直接调用,相当于传入undefined,undefined进行相加,会返回NaN(非数字)。

传递实参数量多于形参

        在JavaScript中,arguements对象是一个类数组对象,它提供了访问一个函数调用中实参列表的机制。这个对象在函数体内部可用,并且包含了函数调用时传递的所有参数。尽管它看起来像一个数组,但它并不是一个真正的数组,因此它不具备数组的某些方法,比如pop、push、slice等。

        定义函数,打印arguements数组,可以返回传入的参数,返回数组索引值为0的函数。有实参没有形参,代码不会报错。

        定义函数add(a,b),函数的实参和形参是一一对应的,传入三个参数,函数只取前两个参数进行计算,函数不会报错,但多传入的参数不会起作用。

        返回arguements数组,可以发现函数有三个参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

史上最快,仅需10ms的动态点云剔除方法

论文题目&#xff1a; A Fast Dynamic Point Detection Method for LiDAR-Inertial Odometry in Driving Scenarios 论文作者&#xff1a; Zikang Yuan, Xiaoxiang Wang, Jingying Wu, Junda Cheng, Xin Yang 导读&#xff1a; 本文实现了一种十分快速的动态点剔除方法&…

python 数据可视化折线图练习(下:代码演示)

根据上篇对三国疫情情况数据的罗列&#xff0c;构建折线图完成数据展示。&#xff08;示例如下&#xff09; 接下来是具体代码演示 import json from pyecharts.charts import Line from pyecharts.options import TitleOpts , LegendOpts , ToolboxOpts ,VisualMapOpts , T…

vue 3d echarts scatter3D元素塌陷,图标塌陷进地图完美解决方案

当我们手机用 scatter3D 类型时&#xff0c;最小值因为渲染问题会塌陷进模型里面&#xff0c;所以只要让value固定&#xff0c;再将label formatter 配合 boxHeight属性即可解决&#xff0c;&#xff08;代码附带自定义label图标解决办法&#xff09; 解决&#xff1a; <…

np.pad各种方式的图文解释

‘constant’——表示连续填充相同的值&#xff0c;每个轴可以分别指定填充值&#xff0c;constant_values&#xff08;x,y&#xff09;时前面用x填充&#xff0c;后面用y填充&#xff0c;缺省值填充0 ‘edge’——表示用边缘值填充 ‘linear_ramp’——表示用边缘递减的方式填…

Windows编程:图标资源、光标资源、字符串资源、加速键资源、WM_PAINT消息、绘图

承接前文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列win32-鼠标消息、键盘消息、计时器消息、菜单资源 本文目录 图标资源光标资源WM_SETCURSOR 消息 字符串资源加速键资源WM_PAINT 消息绘图绘图编程绘图基础基…

后端Web之分层解耦(控制反转IOC-依赖注入DI)

目录 1.三层架构 2.IOC-DI引入 3.IOC-DI使用 4.IOC细节 5.DI细节 内聚&#xff08;Cohesion&#xff09;和耦合&#xff08;Coupling&#xff09;是软件工程中两个重要的概念&#xff0c;它们衡量了软件组件的组织方式和组件之间的相互依赖程度。高内聚性意味着模块内的元…

2024真无线蓝牙耳机怎么选?24年四款性价比畅销爆款机型盘点

2024年&#xff0c;真无线蓝牙耳机的市场依旧竞争激烈&#xff0c;各种品牌和型号如雨后春笋般涌现&#xff0c;面对琳琅满目的选择&#xff0c;2024真无线蓝牙耳机怎么选&#xff1f;消费者在寻找具备高性价比和优秀性能的耳机时往往会感到困惑&#xff0c;那么我将针对大家的…

Nature Medicine | 常规机器学习构建蛋白质组衰老时钟!对于数学基础不好的同学,好好思考一下这种研究模式如何借鉴?

今天给各位老铁们分享一篇于2024年08月08号发表在 Nature Medicine [58.7] 的文章&#xff1a;"Proteomic aging clock predicts mortality and risk of common age-related diseases in diverse populations"&#xff0c;蛋白质组衰老时钟可预测不同人群的死亡率和常…

机器学习-卷积神经网络(CNN)

机器学习-卷积神经网络&#xff08;CNN&#xff09; 1. 卷积神经网络的基本概念1.1 卷积层&#xff08;Convolutional Layer&#xff09;1.1.1 卷积操作1.1.2 特征图&#xff08;Feature Map&#xff09; 1.2 激活函数&#xff08;Activation Function&#xff09;1.2.1 ReLU&a…

JavaEE从入门到起飞(八) ~ Git

git 概括 Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等)。 学了git能干什么&#xff1f; 代码回溯 查看历史提交记录并恢复到之前的某个状态。这在发现错误或需要查看特定版本时非常有用。和CtrlZ的区别在于g…

【图机器学习系列】(一)图机器学习简介

微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;412408155 CSDN&#xff1a;https://blog.csdn.net/woai8339?typeblog &#xff0c;代码随想随记 GitHub: https://github.com/riverind 抖音【暂未开始&#xff0c;计划开始】&#xf…

Qt找不到QSound头文件,头文件QSoundEffect

目录 Qt找不到QSound头文件 CMake qmke 可能版本不同更新&#xff0c; 找不到QSound头文件 Qt找不到QSound头文件 #include <QSound> CMake 可以看一下这篇来自网上的文章 CMake中添加Qt模块的合理方法 - wjbooks - 博客园 (cnblogs.com) qmke 打开.pro文件&am…

Flowise在ubuntu22.04上的安装

之前我写过一篇FastGPT的文章&#xff0c;这里我再介绍另外一个开源的低代码工具&#xff0c;他提供开发人员可定制的LLM编排流程和AI代理。开发 LLM 应用程序通常涉及无数次迭代。Flowise的低代码和拖放式 UI 方法支持快速迭代&#xff0c;帮助您更快地从测试到生产。 推荐它的…

鸿蒙(API 12 Beta3版)【AVSession Kit简介】 音视频播控服务

AVSession Kit&#xff08;Audio & Video Session Kit&#xff0c;音视频播控服务&#xff09;是系统提供的音视频管控服务&#xff0c;用于统一管理系统中所有音视频行为&#xff0c;帮助开发者快速构建音视频统一展示和控制能力。 能力范围 提供音视频统一管控能力&…

Windows Server 域控制服务器安装及相关使用

目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间&#xff0c;账户过期时间 5.软件分发 ​编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制&#xff0c;拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提&#xff1a;客…

通过调整JVM的默认内存配置来解决内存溢出(‌OutOfMemoryError)‌或栈溢出(‌StackOverflowError)‌等错误

文章目录 引言I 调整JVM的默认堆内存配置java命令启动jar包Tomcat服务器部署java应用引言 问题: org.springframework.web.util.estedServletException: Handlerdispatch failed: nested exception isjava.lang.0utOfMemoryError: Java heap space原因分析: 查询查询平台所…

python 之可视化数据(地形图练习)

一、按要求构建疫情情况数据的地形图 二、代码展示 from pyecharts.charts import Map from pyecharts.options import VisualMapOptsmap Map() data [("北京市" , 994),("上海市" , 199),("湖南省" , 299),("台湾省" , 12),(&qu…

[游戏开发] LuaTable转string存读二进制文件

UE5和Unity通用此方案&#xff0c;只不过读写文件的接口略有不同&#xff0c;lua代码的处理是相同的。 下面两个方法是 LuaTable和字符串互相转换的代码 function XUtils.luaTableToString(tab, sp)sp sp or ""local s ""for k,v in pairs(tab) doif t…

高斯泼溅综合指南

高斯泼溅&#xff08;Gaussian Splatting&#xff09;是一种表示 3D 场景和渲染新视图的方法&#xff0c;在“实时辐射场渲染的 3D 高斯泼溅” 中引入。它可以被认为是 NeRF 类模型的替代品&#xff0c;就像当年的 NeRF 一样&#xff0c;高斯泼溅引发了大量新的研究工作&#x…

Android Kotlin - 通过 URL Scheme 打开应用

在 Android 应用中&#xff0c;可以通过自定义 URL Scheme 或 Deep Links 打开应用。这允许你定义一个自定义的 URL 格式&#xff0c;使得当用户点击包含这个 URL 的链接时&#xff0c;系统可以识别并打开你的 APP。以下是详细的实现步骤和一些注意事项。 1. 配置 AndroidMani…