函数创建与使用

函数使用的原因

函数是设计出来是为了完成某项功能的代码块。只要调用就能执行。实现代码复用。代码复用是不是复制,而是同样的代码不用写很多。只要用调用的代码来写,就能完成。将功能代码放到某个地方。函数的设计就是为了代码复用。

声明函数和调用函数

这一段功能代码首先是要声明的。声明之后调用可以执行内部功能代码块。实现代码复用。

function 函数名(形参名,形参名){

代码块
}

这里声明函数与java不同。这里就是只用function关键字。而且一定有返回值的。java是可以没有。但是不用写返回类型。因为返回类型不是let var const 最后返回的只是一个值。所以返回值类型肯定是数据类型。但是我们这JS弱类型语言。无论返回什么类型都能接收。因此不写返回值类型。是任意的。我们形参不写let var声明默认用let来声明。调用如果是自己的类内。或者是一个文件的Script都是相当于一个类内。可以直接调用。其他的类调用也和java一样有类名和对象调用。这里function代替public

调用函数时函数名(实参,实参)

函数名声明的规范

函数名命名规范
小驼峰命名,首字母小写,第二个单词开始首字母大写
前缀(首字母)一般为动词
与变量名一致,见名知意

函数传参

函数名内可以写形参,变量名,不用写let。默认是let。调用的时候在函数名括号内写实参,当调用的时候,会首先传参给对应的形参。形参会在函数体内命名。每当一次调用就会传参然后执行代码。传参就会创建变量。当执行代码就去访问当时的参数。执行结束。内存会释放。当再次执行又是一样。函数传参可以让用户控制是如何的功能。如果没参数。则只能自己在函数体内写。一定是不灵活的。只代表一个功能。参数之间用逗号隔开。函数参数分为形参和实参。函数和他有关的就是声明和调用。因此只这两种。

当 var a =1 var a 这种代码第二个代码没有作用的,不会赋值赋undefined,当它发现已经创建就不会创建。没写赋值操作就不会赋值,当不是创建。以及var a=1相当于在最上面写 var a 在原本的地方写 a=1如果有重名一定是找函数体的a。以及传参的时候可以在形参赋值,当执行的时候如果没有给实参,则会值是这个。赋值可以给【】都可以。如果是数组,需要【】要不报错了,函数传参如实参有些没给,则自动给参,给undefined。定义的时候给undefined这个值。如果也是没有默认的。
 

函数返回值

JS函数返回值写的是数据类型,因此不写返回值类型。但是一定是会返回的,没有void这种可以不不返回,return结束函数。且会返回值。如果没有返回值return 后面没写返回值/没写return。调用结束都会给undefined。写了这个返回值,执行到最后return/已经结束。结束会把return后面的值/undefined赋给调用整体。虽然不是变量。但是有值。如三目运算符。这个整体也和变量一样有值,可以赋给其他变量。如果没有返回值执行结束了,我们把实参给它,但是没有返回值的。结束就结束了。没办法再程序中得到值。想在什么时候使用就使用。即使里面给了某一个元素。也很麻烦。没办法给不是变量的,做其他运算。所以返回值可以有这种作用。让调用者如同三目运算符赋值,不是变量。因此没有地址。但是整体代表那个值。赋给变量。值给它。=一定是字面值。返回值可以写变量名,没事,因为执行的时候,会赋值,会计算出来给调用者。

断点

Fn+F11/F11

作用域

我懂了。如果是在全局变量那里写的。不是函数体内,是自调。但是对于函数体内写的let是创建在函数体内。当执行函数体/其他代码。我们执行的时候,如果访问变量,首先是从改变量所在作用域找。找不到才从包围这个作用域的作用域从小到大去找。全局是window对象/脚本对象。/写在script下的。找的时候,一定是从包围查找代码的作用域的作用域从小到大的找。去找作用域的变量。

变量创建

变量可以不写关键词来命名,但是不写关键词的都是相当于写了var  只要写了var都是全局变量。当没写关键词的就相当于写了var。但是不会有var a这种,只在执行那一句的时候,去找全局是否有,有则赋值,无则创建。变量名命名的时候只要是不同作用域范围内的变量名可一样,但是一个作用域的起名一定不同。作用域包围另一个可不是同一个作用域。我弄错了,var/let写在函数体的就地址在函数体内。

var!=全局变量

函数体内函数体外

无论什么定义var/let..

,最后都是在函数体内创建地址

写任何关键词都是脚本对象/window对象,都是全局变量

除非不写关键词,且不写关键词的时候,函数本身,没这个,不找自己的时候,

去找外部全局的时候,找不到会当成

var来创建地址。且不会有var a这种

,只执行一句。找不到的时候,不报错,当成window上的变量创建。

在函数体外,不写也当成var。

匿名函数

一个函数它是可以没有函数名的。但是一个函数如果没有函数名一定要把它赋给一个变量。一个变量时可以被赋函数。无论是否是匿名函数。也可以是有函数名的函数。这个赋值了之后,把这个变量名(),会调用函数,无论是否对应函数名。变量可以给字面值也可以是函数。但是如果写的是匿名函数必须写let,否则无效,也会报错。且如果将函数给变量,函数代码存在变量地址内。调用不了无法用函数名。写在方法去按函数名调用。用函数名是在方法去找。

立即执行函数

有两种写法

( function(){}())或者(function(){})()

这两种都是立即执行函数。这种函数的特点就是不会加载到方法区,不存在被其他的调用。只能在这个()调用写的这个函数,当执行这个代码的时候,就执行,执行完了,这空间肯定会被释放。且不会再被调用。这个函数再也访问没办法调用。 立即执行函数前和立即执行函数语句都需要加;对于立即执行函数,换行不代表结束。对于其他换行代表结束。因此结束一个语句另一个就可以执行,不会报错。前面必须加,要不就会当成没结束。立即执行函数也可以访问全局等其他作用域。我们知道函数调用结束都可以有返回值,且返回值可以赋给调用者。如果函数给一个变量。返回值也会赋给调用者。变量名()。这里调用者是整体。因此这个整体会是return的值。

立即执行函数如何防止变量污染呢?

变量污染是针对全局变量可能会产生一样的变量名,无论var/let都会产生错误。因此我们把变量放到局部函数内写。不同的作用域不会有全局变量名相同。但是局部变量自己注意也不能同。其实只要是函数就能实现防止变量污染。我们函数只执行一次就用立即执行,否则我们不用这个,实现多次。如果用立即函数且实现多次,没办法调用。需要些多端重复代码。代码复用可以只改一段实现多段改变。

逻辑中断

当我们执行逻辑与/逻辑或的时候,我们执行是从左往右执行,执行到能代表整体最后的值结束。我们执行的时候,只要一下子左/右转换成true,能决定这个整体的真假,就结束。将这个值给整体。执行逻辑与逻辑或整体的时候,这样写在右边的代码无法执行。逻辑与逻辑或左右都是可以写语句的。if等这些最后转换成布尔都是可以写语句。逻辑与,逻辑或也是可以写语句。不过最后的值是变量。我们可以用逻辑或写在形参上,形参在最上面写逻辑或,一定是写在右边的会不执行。中断,是从左往右。我们将没有赋值要给的值,写在右边。最后的值是执行到那一步。用逻辑或只要给了值,转成不是false。不会区执行右边。当没给值等就会执行右边,最后是右边的值。最后整体转成布尔是那个值还是看最后的值。看最后的值,在if内,隐式转成boolean。看整体的值的时候,是没有转换的。

隐式/显示Boolean()转换布尔最后的值只false/true。不像数字,数字最后是NaN和数字。

0 undefined nul nan ''都最后是false。一定是空字符串,写了空格,字符内也是有的。空格也是字符。得到的都是。return。

函数名相同

当定义函数名相同的。由于JS是弱类型语言,因此无法根据参数来方法重载。只能有一个函数名相同的函数。我们会先编译html文件,将函数放在方法区放的时候,后面的函数会代替前面的留在方法区。当执行的时候调用方法找的是方法区。所以调用方法可以在声明函数前。会先编译。函数名相同不报错。

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

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

相关文章

【算法题】字符统计及重排(js)

解法&#xff1a; const str "xyxyXX"; const str1 "abababb"; function solution(str) {const strArr str.split("").sort((a, b) > a - b);const map new Map();for (let i 0; i < strArr.length; i) {if (map.has(strArr[i])) {m…

摇头机,舞台灯,白色家电,3D打印,医疗器械等安防芯片步进驱动选型GC系列,低成本,大电流

GLOBALCHIP新一代的安防产品用的芯片&#xff0c;GC3901 GC3909 GC3910 GC3911 GC8548 GC8549 GC6609 GC6610 GC2003 GC2803 GC2804步进驱动 达林顿选型型号&#xff0c;采用12V H 桥驱动器。其中最大持续电流(A)可达2.5A。其中GC6610&#xff0c;GC6609 是36V&#xff0c;低成…

14-Kafka-Day02

第 4 章 Kafka Broker 4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 &#xff08;1&#xff09;启动 Zookeeper 客户端。 bin/zkCli.sh 因为你在配置kafka的时候指定了它的名字。 &#xff08;2&#xff09;通过 ls 命令可以查看 kafka 相关信息。 [zk: …

超越边界:Mistral 7B挑战AI新标准,全面超越Llama 2 13B

引言 在人工智能领域&#xff0c;模型的性能一直是衡量其价值和应用潜力的关键指标。近日&#xff0c;一个新的里程碑被设立&#xff1a;Mistral AI发布了其最新模型Mistral 7B&#xff0c;它在众多基准测试中全面超越了Llama 2 13B模型&#xff0c;标志着AI技术的一个重大进步…

深兰科技“汉境”入选2023年湖北省人工智能十大优秀应用案例

11月18日&#xff0c;央视“专精特新制造强国”城市大会在湖北武汉召开。会上&#xff0c;正式发布了“湖北省工业互联网标识十大优秀应用案例”&#xff0c;由深兰科技(武汉)股份有限公司基于AIGC多模态融合大模型技术开发打造的江汉路步行街元宇宙场景应用——汉境&#xff0…

Java异步编程之利器:Guava异步编程实践

第1章&#xff1a;引言 - 为什么要用Guava进行异步编程&#xff1f; 大家好&#xff0c;我是小黑&#xff01;今天咱们要聊的是Guava在异步编程中的应用。首先&#xff0c;让我们搞清楚为什么要用Guava来处理异步任务。在Java的世界里&#xff0c;异步编程是个老话题了&#x…

漏洞复现--速达进存销管理系统任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

vue项目 treeselect校验不生效

使用treeselect时&#xff0c;el-form表单检验rules不生效&#xff0c;使用blur与change都无效&#xff0c;我的解决方法代码如下&#xff1a; 在treeselect标签里使用select方法&#xff0c;该方法为选择一个项后发出&#xff0c;在每次选择组织的时候都进行unitId的校验。 …

KaiwuDB 获评信通院 2023 大数据“星河”标杆案例

12月6日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601) 共同组织的 2023 大数据“星河(Galaxy)”案例评选结果正式公示&#xff0c;“基于 KaiwuDB 的台区云储能示范项目”历经多环节严苛评审&#xff0c;从累计 706 份申报项目中…

el-table表格出现滚动条的时候,内容和表头对不齐

1&#xff0c;在获取表格数据完成后的位置加 this.$nextTick(() > {this.$refs.templateData.doLayout(); })2,要记得在上加上ref <el-table ref"templateData" ></el-table>加完之后的

IDEA使用小技巧

常用的基本设置 界面字体 File | Settings | Appearance & Behavior | Appearance 编辑区字体 File | Settings | Editor | Color Scheme | Color Scheme Font Use color scheme font instead of the default 控制台字体 File | Settings | Editor | Color Scheme | Conso…

免费安装office流程(官方自动批量激活)

全程不需要第三方软件&#xff0c;所有用到的工具都是微软官方的&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 基于KMS的 GVLK&#xff1a;https://learn.microsoft.com/zh-cn/deployoffice/vlactivation/gvlks 首先我们需要去下载 office 软件部署工具&a…

神经网络是如何工作的? | 京东云技术团队

作为一名程序员&#xff0c;我们习惯于去了解所使用工具、中间件的底层原理&#xff0c;本文则旨在帮助大家了解AI模型的底层机制&#xff0c;让大家在学习或应用各种大模型时更加得心应手&#xff0c;更加适合没有AI基础的小伙伴们。 一、GPT与神经网络的关系 GPT想必大家已…

MFC CLXHHandleEngine动态库-自定义设置对话框使用

实现的效果如下所示&#xff1a; void CSampleDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CSgxMemDialog dlg(180, 100); dlg.SetEnable(true); dlg.SetWindowTitle(_T("自定义对话框")); dlg.AddStatic(1000, //控件资源…

基于ssm亿互游在线平台设计与开发论文

摘 要 随着旅游业的迅速发展&#xff0c;传统的旅游资讯查询方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;特开发了本亿互游在线平台。 本文研究的亿互游在线平台基于SSM框架&#xff0c;采用JSP技术、Java语言和…

HTML行内元素和块级元素的区别? 分别有哪些?

目录 一、行内元素和块级元素的区别二、行内元素和块级元素分别有哪些1、行内元素2、块级元素 一、行内元素和块级元素的区别 1、行内元素不会占据整行&#xff0c;在一条直线上排列&#xff0c;都是同一行&#xff0c;水平方向排列&#xff1b;    2、块级元素可以包含行内…

Android---Kotlin 学习001

Kotlin 的诞生 2011年&#xff0c;JetBrains 宣布开发 Kotlin 编程语言&#xff0c;这门新语言可以用来编写在 Java 虚拟机上运行的代码&#xff0c;是 Java 和 Scale 语言之外的又一选择。2017年&#xff0c;Google 在赢得与 Oracle 的诉讼一年后&#xff0c;Google 宣布 Ko…

仿短视频风格的自适应苹果CMS模板源码

这是一款仿短视频风格的自适应苹果CMS模板源码&#xff0c;设计简洁&#xff0c;适合用于搭建个人视频网站或者短视频分享平台。模板支持响应式布局&#xff0c;演示地 址 runruncode.com/yingshimanhau/19650.html 适配各种屏幕尺寸&#xff0c;功能丰富&#xff0c;用户体验良…

人工智能|深度学习——知识蒸馏

一、引言 1.1 深度学习的优点 特征学习代替特征工程&#xff1a;深度学习通过从数据中自己学习出有效的特征表示&#xff0c;代替以往机器学习中繁琐的人工特征工程过程&#xff0c;举例来说&#xff0c;对于图片的猫狗识别问题&#xff0c;机器学习需要人工的设计、提取出猫的…

安装python

1.下载python 选择版本 选择可执行文件安装包 2.安装 输入python检查是否安装成功