靡语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");

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

react hook使用UEditor引入秀米图文排版

里面坑比较多,细节也比较多 以下使用的是react 18 ice3.0,使用其他react脚手架的配置基本相同,例如umi4 1.下载UEditor 进入UEditor仓库,找到版本v1.4.3.3,点击进去 接着下载ueditor1_4_3_3-utf8-jsp.zip版本 下载好…

STL容器适配器之stack与queue

​ 1.stl里的stack与queue和string、vector、list等容器不一样,它们是容器适配器; ​ 2.容器适配器的本质是一种复用,不需要自己实现储存结构,而是根据需求提供接口,储存结构靠其他容器。反向迭代器是由正向迭代器适配…

基于Java SSM框架实现高校网课管理系统项目【项目源码+论文说明】

基于java的SSM框架实现高校网课管理系统演示 摘要 随着移动应用技术的发展,越来越多的学生借助于移动手机、电脑完成生活中的事务,许多的行业也更加重视与互联网的结合,以提高教学的教育水平和寻求更高的经济利益。针对高校网课管理系统&…

高级RAG:揭秘PDF解析

原文地址:https://pub.towardsai.net/advanced-rag-02-unveiling-pdf-parsing-b84ae866344e 2024 年 2 月 3 日 附加内容:揭秘PDF解析:如何从科学pdf论文中提取公式 对于RAG,从文档中提取信息是一个不可避免的场景。确保从源头…

LeetCode LCR 085.括号生成

正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2: 输入&#x…

线程池(ThreadPoolExecutor,as_completed)和scrapy框架初步构建——学习笔记

用法1:map函数 with ThreadPoolExecutor() as pool: results pool.map(craw,utls)for result in results:print(result) 1.Scrapy框架: 五大结构:引擎,下载器,爬虫,调度器,管道&#x…

<网络安全>《50 网络攻防专业课<第十四课 - 华为防火墙的使用(3)>

7防火墙的防范技术(2) 7.1 DNS Flood攻击防范 攻击介绍 攻击者在短时间内通过向DNS(Domain Name System)服务器发送大量的查询报文,使得服务器不得不对所有的查询请求进行回应,导致DNS服务器无法为合法用户…

Spring的优点

1.方便解耦,简化开发 Spring就是一个容器,可以将所有对象创建和关系维护交给Spring管理。 2.AOP编程支持 面向切面编程,方便实现程序进行权限拦截,运行监控等功能。 3.声明式事务的支持 通过配置完成事务的管理,…

【图论】【堆优化的单源路径】LCP 20. 快速公交

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 LCP 20. 快速公交 小扣打算去秋日市集,由于游客较多,小扣的移动速度受到了人流影响: 小扣从 x 号站点移动至 x 1 号站点需要花费的时间为 inc; 小扣从 x 号站…

【第八天】C++异常的抛出、捕获以及标准异常库

一、异常的概述 异常:是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要 读取的文件不存在,空指针,内存不足,访问非法内存等等)。(异常是一个类。…

职业规划,电气工程师的岗位任职资格

电气工程技术人员主要是指精通电气施工技术,从事与电气产相关研发工作并能够解决实际问题,对相关资源进行最终统筹的人员。一般来说,这类人员主要从事绘制、审核和把关电气图纸的工作,在审核电气图纸的时候,会检查施工…

【Golang】Golang使用embed加载、打包静态资源文件

【Golang】Golang使用embed加载、打包静态资源文件 大家好 我是寸铁👊 总结了一篇Golang使用embed加载静态资源文件的文章✨ 喜欢的小伙伴可以点点关注 💝 前言 事情是这样的:前不久,有同学问我,golang怎么把静态资源文件打包成一…

freemarker模板引擎结合node puppeteer库实现html生成图片

效果图: 先看效果图,以下是基于freemarker模板渲染数据,puppeteer加载html中的js及最后图片生成: 背景: 目前为止,后台java根据html模板或者一个网页路径生成图片,都不支持flex布局及最新的c…

Spring篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、不同版本的 Spring Framework 有哪些主要功能?二、什么是 Spring Framework?三、列举 Spring Framework 的优点。四、Spring Framework 有哪些不同的功能?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

二进制部署k8s集群之cni网络插件

目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…

高速DRAM的training

随着每一代接口(Interface)和存储(memory)的频率和速率的提高,信号采样以及传输变得越来越困难,因为数据眼(data eyes)越来越小。 为了帮助高速 I/O 握手,接口和存储支持越来越多的Training Modes,系统设计人员必须将这些Trainin…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat(开机自启动) 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本(设置自启动,服务器开启即启动) 三. MySQL安装(…

【蓝桥杯省赛真题27】python纸张数量 中小学青少年组蓝桥杯比赛python编程省赛真题解析

目录 python纸张数量 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python纸张数量 第十二届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发,采用vue框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安全性…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天,我们继续分享2015年-2024年的考研数学三选择题,随机做5道真题,并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项,都是拉分大户,但是数学如果掌握了技巧,吃透了知识点的话…