靡语IT:JavaScript函数

 

目录

一、基本概念

二、函数的声明和调用:

1、创建函数:

​编辑

2 、函数调用:

3、函数参数:

三、全局变量和局部变量

1、局部JavaScript 变量

2 、全局 JavaScript 变量

四、arguments 对象:

五、return 作用

六、嵌套函数

七、回调函数

八、匿名函数

九、递归函数

十、构造函数

十一、函数的内部属性和方法


一、基本概念

在JavaScript中,函数即对象,可以随意地被程序操控,函数可以嵌套在其他函数中定义,这样可以访问他们被定义是所处的作用域中的任何变量。

1) 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

2) JavaScript 函数语法:函数就是包裹在花括号中的代码块:

实例:

JavaScript 函数语法

函数就是包裹在花括号中的代码块,前面使用了关键词 function:

当调用该函数时,会执行函数内的代码。

可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。

JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函 数名称相同的大小写来调用函数。

提示:function 中的花括号是必需的,即使函数体内只包含一条语句,仍然必 须使用花括号将其括起来

二、函数的声明和调用:

1、创建函数:

1)使用关键字 function 关键字声明函数

使用了关键词 function 来声明函数

关键词 function 必须是小写的,并且必须以与函数名称相同的 大小写来调用函数。

函数名是函数声明语句中必须写得部分

函数名必须只按标识符的命名规范

()里可放多个或 0 个参数用逗号隔开

2)字面量创建函数

字面量创建函数,函数没有被提前的概念

这里的函数名是变量。变量有被提前的概念

3)Function ()

2 、函数调用:

在调用函数时,您可以向其传递值,这些值被称为参数。 这些参数可以在函数中使用。

您可以发送任意多的参数,由逗号 (,) 分隔:

当您声明函数时,请把参数作为变量来声明:

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定 的值,以此类推。

实例:

上面的函数在按钮被点击时会提示 "Welcome Harry Potter, the Wizard"。

函数很灵活,您可以使用不同的参数来调用该函数,这样就会给出不同的消息:

根据您点击的不同的按钮,上面的例子会提示 "Welcome Harry Potter, the Wizard" 或 "Welcome Bob, the Builder"

函数本身不会自动运行,只有当调用该函数时,才会执行函数内的代码。

1) 函数可以通过其名字加上括号中的参数进行调用

2) 可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由

JavaScript 在任何位置进行调用。

3) 自调用,函数本身加上括号在使用一个括号自调用

3、函数参数:

函数参数在调用函数时,您可以向其传递值,这些值被称为参数。带有参数

的函数也被称为有参函数。

形参:形式上的参数,没有实际值,形参只作用于函数内部

实参:实际上有值的参数

注:实参传值传多了,不会报错。代码只取对应的前面的参数 实参传少了,会 出错输出 NAN(非数值类型)

JavaScript 函数参数

JavaScript 函数对参数的值(arguments)没有进行任何的检查。

JavaScript 函数参数与大多数其他语言的函数参数的区别在于:它不会关注有 多少个参数被传递,不关注传递的参数的数据类型。

函数显式参数与隐藏参数(arguments)

先前的教程中,我们已经学习了函数的显式参数:

函数显式参数在函数定义时列出。

函数隐藏参数(arguments)在函数调用时传递给函数真正的值。

参数规则

JavaScript:函数定义时参数没有指定数据类型。

JavaScript:函数对隐藏参数(arguments)没有进行检测。

JavaScript:函数对隐藏参数(arguments)的个数没有进行检测。

默认参数

如果函数在调用时缺少参数,参数会默认设置为: *undefined*

有时这是可以接受的,但是建议最好为参数设置一个默认值:

实例:

或者,更简单的方式:

实例:

如果 y 已经定义 , y || 0 返回 y, 因为 y 是 true, 否则返回 0, 因为undefined 为 false。

如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参 数名。 只能使用 arguments 对象来调用。

三、全局变量和局部变量

1) 函数外部的变量函数中可以使用(全局变量)

2) 但是函数中的变量,函数外不能使用。(局部变量)

3) 函数内部不用 var 声明,直接赋值方式声明的变量是全局变量。

1、局部JavaScript 变量

在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数 内部访问它。(该变量的作用域是局部的)。

您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数 才能识别出该变量。

只要函数运行完毕,本地变量就会被删除。

局部变量比同名全局变量的优先级高,所以局部变量会隐藏同名的全局变量。

2 、全局 JavaScript 变量

在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

JavaScript 变量的生存期

JavaScript 变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。

全局变量会在页面关闭后被删除。

向未声明的 JavaScript 变量分配值

如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。

这条语句:

将声明一个全局变量 carname,即使它在函数内执行。

四、arguments 对象:

1) 在函数代码中,使用特殊对象 arguments 存储函数调用传递给该函数的 所以参数。

2) 还 可 以 用 arguments 对 象 检 测 函 数 的 参 数 个 数 , 引 用 属 性 arguments.length 即可。

3) arguments [0]表示函数的第一个参数,arguments [1]表示函数的第二 个参数......

4) 通过 arguments 可以动态的添加参数。

JavaScript 函数有个内置的对象 arguments 对象.

argument 对象包含了函数调用的参数数组。

通过这种方式你可以很方便的找到最后一个参数的值:

实例:

或者创建一个函数用来统计所有数值的和:

实例:

通过值传递参数

在函数中调用的参数是函数的参数。

如果函数修改参数的值,将不会修改参数的初始值(在函数外定义)。

总结:JavaScript 函数传值只是将参数的值传入函数,函数会另外配置内存保 存参数值,所以并不会改变原参数的值。

实例:

通过对象传递参数:

在 JavaScript 中,可以引用对象的值。

因此我们在函数内部修改对象的属性就会修改其初始的值。 修改对象属性可作用于函数外部(全局变量)。

实例:

五、return 作用

1) 可以将返回值赋值给一个变量,然后对变量进行操作

2) 当函数遇到第一个 return 后将终止执行函数后边的语句,直接跳出函数

带有返回值的函数

有时,我们会希望函数将值返回调用它的地方。

通过使用 return 语句就可以实现。

在使用 return 语句时,函数会停止执行,并返回指定的值。

语法:

上面的函数会返回值 5。

*注意* *:*整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执

行代码,从调用函数的地方。

函数调用将被返回值取代:

myVar 变量的值是 5,也就是函数 "myFunction ()" 所返回的值。 即使不把它保存为变量,您也可以使用返回值:

"demo" 元素的 innerHTML 将成为 5,也就是函数 "myFunction ()" 所返回的值。 您可以使返回值基于传递到函数中的参数:

实例:

计算两个数字的乘积,并返回结果:

"demo" 元素的 innerHTML 将是:

在您仅仅希望退出函数时 ,也可使用 return 语句。返回值是可选的:

如果 a 大于 b,则上面的代码将退出函数,并不会计算 a 和 b 的总和。

六、嵌套函数

函数内部调用函数

七、回调函数

自己将代码写出来,但不是自己去调用,由其它程序负责调用该函数

八、匿名函数

匿名函数:就是没有函数名

注意:

1) 匿名函数的调用,必须放在函数声明之后

2) 普通函数调用,是可以在函数声明之前的

九、递归函数

函数可以调用自身,这就是递归(recursion)

递归函数同样也需要一个跳出条件,否则就是死循环。

十、构造函数

构造函数专门用来创建对象的。

This:

十一、函数的内部属性和方法

  1. Arguments

    Arguments 是一个函数中自带的对象

    arguments 是一个对应于传递给函数的参数(实参)的类数组对象。

    arguments.length 传递给函数的参数数量。(实参)

    函数的 length 属性是只读属性,代表函数形参的数量,也就是在函数定义时给出的形参个数。

2.prototype 属性(原型)

每一个函数都包含一个 prototype 属性,这个属性指向一个对象 的引用,这个对象称做“原型对象 ”(prototype object)。

prototype 属性允许您向对象添加属性和方法

注意: Prototype 是全局属性,适用于所有的 Javascript

对象。

语法: object.prototype.name=value

这个 prototype 的属性值是一个对象(属性的集合,再次强调!),

默认的只有一个叫做 constructor 的属性,指向这个函数本身

3.函数对象自带的 call()方法和 apply ()方法

每个函数都包含两个非继承而来的方法:call()方法和 apply ()方法。

定义:call 和 apply 可以用来重新定义函数的执行环境,也就是 this 的指向;call 和 apply 都是为了改变某个函数运行时的 context,即 上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。

call()

调用一个对象的方法,用另一个对象替换当前对象,可以继承另外一

个对象的属性,它的语法是:

Function.call(obj[, param1[, param2[, [,...paramN]]]]);

//obj:这个对象将代替 Function 类里 this 对象

//params:一串参数列表

//说明:call 方法可以用来代替另一个对象调用一个方法,call 方 法可以将一个函数的对象上下文从初始的上下文改变为 obj 指定的

新对象,如果没有提供 obj 参数,那么 Global 对象被用于 obj。

apply ()

和 call()方法一样,只是参数列表不同,语法:

Function.apply (obj[, argArray]) ;
​
//obj:这个对象将代替 Function 类里 this 对象
​
//argArray:这个是数组,它将作为参数传给 Function
​
//说明:如果 argArray 不是一个有效数组或不是 arguments 对象, 那么将导致一个 TypeError,如果没有提供 argArray 和 obj 任何一
​
个参数,那么 Global 对象将用作 obj。

Apply ()和 call()中的参数是谁,那么 this 就指向谁

## 作用

共同作用:修改 this 指向

其次就是它们不同的传参方式:注意上一句话中说他们的作用时 有两个关键词 ‘ 函数 ’和‘this ’,想要修改 this 的指向,那么 必然有一个 this 修改后的指向,而函数必然后关系到传参问题:call 方法可以传给该函数的参数分别作为自己的多个参数,而 apply 方法

必须将传给该函数的参数合并成一个数组作为自己的一个参数:

## 区别

不同之处是:

call() 方法接受的是**一个参数列表

apply () 方法接受的是**一个包含多个参数的数组

如果要使用数组而不是参数列表,则 apply () 方法非常方便。

person.fullName.apply (person1, ["Oslo", "Norway"]) ;

person.fullName.call(person1, "Oslo", "Norway");

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

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

相关文章

172基于matlab的MPPT智能算法

基于matlab的MPPT智能算法,通过细菌觅食进行优化。算法引入了趋向性操作,用以进行局部范围内的最优寻找;引入了复制操作,用以避免种群更新盲目随机性,加快了算法的收敛速度;引入了迁徙操作用以避免算法陷入…

【深度学习笔记】卷积神经网络——填充和步幅

填充和步幅 在前面的例子 fig_correlation中,输入的高度和宽度都为 3 3 3,卷积核的高度和宽度都为 2 2 2,生成的输出表征的维数为 2 2 2\times2 22。 正如我们在 sec_conv_layer中所概括的那样,假设输入形状为 n h n w n_h\tim…

【Flink精讲】Flink组件通信

主要指三个进程中的通讯 CliFrontendYarnJobClusterEntrypointTaskExecutorRunner Flink内部节点之间的通讯使用Akka,比如JobManager和TaskManager之间。而operator之间的数据传输是利用Netty。 RPC是统称,Akka,Netty是实现 Akka与Ac…

Java实现毕业生追踪系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行,给网吧部署一套无缝漫游的WIFI网络势在必行。同时,网吧无线准入的验证码在客户机上面进行更新,以防周边的人员进行蹭网,损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

FastJson中AutoType反序列化漏洞

文章目录 1、频繁出现的反序列化漏洞2、parse()及parseObject()3、AutoType及安全校验3.1 AutoType安全校验3.2 AutoType黑名单机制3.3 SafeMode安全机制3.4 攻击思路4、反序列化攻击模拟4.1 TemplatesImpl攻击调用链路4.2 攻击类Translet生成4.3 构造攻击JSON串4.4 攻击模拟5、…

Linux之用户跟用户组

目录 一、简介 1.1、用户 1.2用户组 1.3UID和GID 1.4用户账户分类 二、用户 2.1、创建用户:useradd 2.2、删除用户:userdel 2.3 、修改用户 usermod 2.4、用户口令的管理:passwd 2.5、切换用户 三、用户组 3.1、增加一个用户组:groupadd 3.…

基于yolov5的水果成熟度检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的水果成熟度检测系统,支持图像检测,视频检测和实时摄像检测功能_哔哩哔哩_bilibili (一)简介 基于yolov5的水果成熟度检测系统是在pytorch框架下实现的,这是一个完整的项目&#x…

React18源码: reconcliler启动过程

Reconcliler启动过程 Reconcliler启动过程实际就是React的启动过程位于react-dom包&#xff0c;衔接reconciler运作流程中的输入步骤.在调用入口函数之前&#xff0c;reactElement(<App/>) 和 DOM对象 div#root 之间没有关联&#xff0c;用图片表示如下&#xff1a; 在启…

电商+支付双系统项目------电商系统中订单模块的开发

这篇文章是关于项目的订单模块的设计。这个模块其实相对来讲比之前的模块复杂了点&#xff0c;我这里说的复杂并不是说难以理解&#xff0c;而是说文件比较多&#xff0c;理解起来还是蛮轻松的。 我们还是老方法&#xff0c;一步一步的去设计&#xff0c;按照Dao->service-&…

建立不同类型网站分别大概需要多少钱??

如今&#xff0c;越来越多的企业会考虑建立一个企业官方网站来展示企业形象&#xff0c;或者建立一个电子商务网站平台来拓展业务渠道&#xff0c;或者建立一个企业内部网来协助企业进行网上工作。 网站建设的类型有很多种&#xff0c;不同类型的网站成本差异很大。 因此&#…

FairyGUI × Cocos Creator 3.x 场景切换

前言 前文提要&#xff1a; FariyGUI Cocos Creator 入门 FairyGUI Cocos Creator 3.x 使用方式 个人demo&#xff1a;https://gitcode.net/qq_36286039/fgui_cocos_demo_dust 个人demo可能会更新其他代码&#xff0c;还请读者阅读本文内容&#xff0c;自行理解并实现。 官…

C++的文件操作详解

目录 1.文本文件 1.写文件 2.读文件 2.二进制文件 1.写文件 2.读文件 1.文本文件 1.写文件 #include<bits/stdc.h> #include<fstream> using namespace std;int main() {ofstream ofs;ofs.open("text.txt",ios::out);ofs << "abc&qu…

2024最新版Python 3.12.2安装使用指南

2024最新版Python 3.12.2安装使用指南 Installation and Usage Guide to the Latest Version - Python 3.12.2 for Windows in 2024 By JacksonML 0. Python的受欢迎程度 据TechRepublic报道&#xff0c;截至2024年2月16日&#xff0c;全球最流行的编程语言之中&#xff0c…

go使用trpc案例

1.go下载trpc go install trpc.group/trpc-go/trpc-cmdline/trpclatest 有报错的话尝试配置一些代理&#xff08;选一个&#xff09; go env -w GOPROXYhttps://goproxy.cn,direct go env -w GOPROXYhttps://goproxy.io,direct go env -w GOPROXYhttps://goproxy.baidu.com/…

普中51单片机学习(红外通信)

红外通信 红外线系统的组成 外线遥控器已被广泛使用在各种类型的家电产品上&#xff0c;它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

Modern C++ std::visit从实践到原理

前言 std::visit 是 C17 中引入的一个模板函数&#xff0c;它用于对给定的 variant、union 类型或任何其他兼容的类型执行一个访问者操作。这个函数为多种可能类型的值提供了一种统一的访问机制。使用 std::visit&#xff0c;你可以编写更通用和灵活的代码&#xff0c;而无需关…

持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍

引言&#xff1a;上一期我们部署好了gitlab极狐网页版&#xff0c;今天我们介绍一下GitLabCI / CD 目录 一、为什么要 CI / CD 方法 1、持续集成 2、持续交付 3、持续部署 二、GitLab CI / CD简介 三、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 …

SQL防止注入工具类,可能用于SQL注入的字符有哪些

SQL注入是一种攻击技术&#xff0c;攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入&#xff0c;你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术&#xff1a; 单引号 ​&#xff1a; 攻击者可能会尝试…