Js - 函数(四)

news2024/11/17 16:49:40

1.函数简单介绍

  • 什么是函数?

函数(function)是执行特定任务的一段代码块

  • 为什么需要函数?

可以实现代码复用,提高开发效率



2.函数使用

  • 函数的声明语法

  • 函数名命名规范

  • 函数的调用语法 

  • 函数体 

函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函 数的功能代码都要写在函数体当中。


3.函数传参

  • 声明语法 

  •  调用语法

  •  形参和实参

  • 参数默认值



4.函数返回值

  • 当函数需要返回数据出去时,用return关键字 

 细节:

  1. 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
  2. return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
  3. return函数可以没有 return,这种情况函数默认返回值为 undefined
  4. 两个相同的函数后面的会覆盖前面的函数
  5. 在Javascript中 实参的个数和形参的个数可以不一致
  6. 如果形参过多 会自动填上undefined (了解即可)
  7. 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)
  8. 函数一旦碰到return就不会在往下执行了 函数的结束用return

总结

1. 为什么要让函数有返回值
Ø 函数执行后得到结果,结果是调用者想要拿到的(一句话,函数内部不
需要输出结果,而是返回结果)
Ø 对执行结果的扩展性更高,可以让其他的程序使用这个结果


2. 函数有返回值用那个关键字? 有什么注意事项呢?
Ø 语法:return 数据
Ø return后面不接数据或者函数内不写return,函数的返回值是
undefined
Ø return能立即结束当前函数, 所以 return 后面的数据不要换行写
 



5.作用域

  • 作用域介绍

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名 字的作用域。

作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突

  • 作用域使用错误场景

  • 作用域特殊情况

如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。

列如:

1. JS 中作用域分为哪2种?

  • 全局作用域。函数外部或者整个script 有效
  • 局部作用域。也称为函数作用域,函数内部有效


2. 根据作用域不同,变量分为哪2种?

  • 全局变量
  • 局部变量


3. 有一种特殊情况是全局变量是那种?我们提倡吗?

  • 局部变量或者块级变量 没有let 声明直接赋值的当全局变量看,我们强烈不提倡
  • 还有一种特殊情况,函数内部的形参可以当做局部变量看

知识扩展(特殊知识点)

1. 在不同作用域下,可能存在变量命名冲突的情况, 到底改执行谁呢?

变量的访问原则

  1. 只要是代码,就至少有一个作用域
  2. 写在函数内部的局部作用域
  3. 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
  4. 访问原则:在能够访问到的情况下 先局部, 局部没有在找全局

2.逻辑运算符里的短路 

短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

案例

 3.转换为Boolean型(重点--背下来)

记忆: ‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true

小案例:

function f1() {
let num = 123
 function f2() {
 console.log( num )
 }
 f2()
}
let num = 456
f1()
function f1() {
let num = 123
function f2() {
let num = 0
console.log(num)
}
f2()
}
let num = 456
f1()
let a = 1
function fn1() {
let a = 2
let b = '22'
fn2()
function fn2() {
let a = 3
fn3()
function fn3() {
let a = 4
console.log(a) //a的值 ?
console.log(b) //b的值 ?
}
}
}
fn1()

答案: 123,0,4 '22'


6.匿名函数

函数可以分为:

没有名字的函数, 无法直接使用。

匿名函数的使用方式:

  1.  函数表达式
  2.  立即执行函数
  • 函数表达式

匿名函数赋值给一个变量,并且通过变量名称进行调用 我们将这个称为函数表达式 

  • 立即执行函数

场景介绍: 避免全局变量之间的污染

综合案例:

 案例1:求和函数封装练习

要求:

  1. 封装函数, 名字为sum

  2. 功能: 根据传入的两个数,求和并且返回求和的结果(函数必须有return返回值)

function sum(a = 0, b = 0){
    return a+b
}

let re = sum(10,20)

案例2:封装一个函数,可以求任意数组的和 或 平均值

函数可以传递2个参数,比如 handleData(arr, true) handleData 处理数据的意思

  • 参数一: 接受实参传递过来的数组

  • 参数二: 布尔类型 如果是true或者不传递参数 是求和操作, 如果传递过来的参数是 false 则是求平均值

function handleData(arr = [], a ){
   let sum = 0
   let result
   for(let i = 0;i<arr.length;i++){
       sum+=arr[i]
   }
    
    if(a === undefined || a = true){
        result =sum
    }
    if(a === false){
        result =sum /arr.length
    }
    
    return result    
}

let result = handleData([1,2,3,4,5])
let result = handleData([1,2,3,4,5],false)

案例3:用户输入秒数,可以自动转换为时分秒

需求: 用户输入秒数,可以自动转换为时分秒
分析:
①: 用户输入总秒数 (注意默认值)
②:计算时分秒(封装函数) 里面包含数字补0
③:打印输出
计算公式:计算时分秒
小时: h = parseInt(总秒数 / 60 / 60 % 24)
分钟: m = parseInt(总秒数 / 60 % 60 )
秒数:    s = parseInt(总秒数 % 60 )

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  

  <script>


    
    function getTime(){
    let time = +prompt('请输入秒数')
      //得到时
      let hour = parseInt(time / 60 / 60 %60) 
      //得到分
      let minute = parseInt(time / 60 % 60) 
      if(minute<10){
        minute='0'+minute
      }
      // 得到秒
      let second = parseInt(time %60)
      if(second<10){
        second='0'+second
      }

      console.log( `${time}转化成时间是${hour}小时${minute}分${second}秒`)
       
    }

    // 调用函数
    getTime()
   



  </script>
</body>
</html>

函数与java中方法的不同点(比较明显的)

1   函数的声明方式不同

  • Js的函数=function 函数名 (参数){}
  • Java的方法=修饰符 返回类型 方法名 (参数){}

2  函数传参不同

  • js中,函数的传参比较灵活,如果这个函数由二个形参,函数传参可以传0 ,2,3都可以,如果传一个则默认二个形参的默认值为undefined,如果2就是正常的传参,如果三个,则前二个正常赋值,第三个不接收,而且Js的参数不对类型进行限制,就是你想传什么参数都可以
  • 在java中,方法传参,个数,类型,顺序必须一一对应,如果个数不对则方法调用失败,如果类型不对,方法也调用失败,顺序不对,则赋值不对
  • 这里就可以看出强类型和弱类型的差别了

3 返回值 

  • JS的返回值类型是可以随意的,意思就是可以随便返回一个类型
  • Java的返回值类型是有限制的,必须是和方法定义的返回值类型一样或者是返回类型的子类,否则报错

4.作用域

基本一样,唯一区别的点就是java中的代码定义在类中,而Js代码定义在<script></script>这个标签中,所以<script></script>类似于java中的主类

其他的那些编程思想基本和java或者说其他语言都是差不多的

以上是个人总结,可能有错误   哈哈!!!!

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

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

相关文章

【Scala】——流程控制

1 if-else 分支控制 让程序有选择的的执行&#xff0c;分支控制有三种&#xff1a;单分支、双分支、多分支 1.1单分支 if (条件表达式) {执行代码块 }1.2 双分支 if (条件表达式) {执行代码块 1 } else {执行代码块 2 }1.3 多分支 if (条件表达式1) {执行代码块 1 } else …

选中图层为什么不能建立3D模型---模大狮模型网

在Photoshop CC 2021(也就是PS6)中&#xff0c;要将选中的图层转换为3D模型&#xff0c;需要满足以下几个条件&#xff1a; 图层类型支持&#xff1a;只有特定类型的图层可以被转换为3D模型。通常&#xff0c;普通的像素图层、矢量图层和形状图层都可以进行转换。但是&#xff…

仲晶同志简历

女&#xff0c;汉族。1972年出生&#xff0c;国防大学科技与装备教研室教官。1992年&#xff0c;仲晶毕业于军事气象学院&#xff0c;1996年成为国防大学国防科技发展战略学硕士研究生&#xff0c;毕业后留校任教。曾出版过9部军事专著&#xff0c;先后发表学术论文100多万字。…

VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

1、实现效果 1.1、文件目录 1.2、说明 1、本组件支持列表的表头自定义配置&#xff0c;checkbox实现 2、本组件支持列表列排序&#xff0c;vuedraggable是拖拽插件&#xff0c;上图中字段管理里的拖拽效果 &#xff0c;需要的话请自行npm install 3、本组件支持查询条件动态…

代码随想录算法训练营第三十一天|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

题目&#xff1a;理论基础 解释&#xff1a;贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优 题目&#xff1a;455.分发饼干 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:455.分发饼干 题目链接&#xff1a;力扣题目链接 图释&#x…

【REST2SQL】07 GO 操作 Mysql 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统&#xf…

低代码与小程序开发:简化创新,加速应用开发

随着信息技术的迅速发展&#xff0c;应用程序的需求与日俱增。然而&#xff0c;传统的软件开发往往耗时、复杂&#xff0c;对于许多企业和开发者来说&#xff0c;开发应用程序的成本和难度成为了一道门槛。而近年来&#xff0c;低代码开发和小程序开发的兴起为解决这一难题带来…

专搞大厂?免费开源?这个小工具我相信很多人需要!

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XHS-Downloader v1.6是一款功能齐全的免费开源工具&#xff0c;它使用Python Requests库开发而成&#xff0c;用于采集和下载X红S作品。该工具具备多…

青年人格测验

青年人格量表也叫加州人格量表&#xff08;cpi&#xff09;&#xff0c;源于美国心理学家高夫的人格理论&#xff0c;共包含有18个维度&#xff0c;其中每个维度都是人格的基础元素&#xff0c;是人们在成长和外界交往中所形成的。 主要应用在人才测评领域&#xff0c;用来评估…

「 网络安全术语解读 」点击劫持Clickjacking详解

引言&#xff1a;要想深入理解点击劫持攻击&#xff0c;我们需要先清楚iframe的用途及优缺点。 1. 关于iframe iframe是HTML语言中的一部分&#xff0c;通常用于在网页中嵌入其他网页的内容&#xff0c;如图像、视频、音频、链接等。它允许在一个网页中插入另一个网页&#xf…

《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗

《豫鄂烽火燎原大小焕岭》&#xff1a;一部穿越时空的历史史诗 一部赓续红色血脉的生动教材 一部讴歌时代英雄和人民精神宝典 当历史的烽烟渐渐远去&#xff0c;留下的是一页页泛黄的记忆和无数英雄的壮丽诗篇。李传铭的力作《豫鄂烽火燎原大小焕岭》正是这样一部深情的回望&am…

实现线程同步的几种方式

线程同步 1. 线程同步概念 线程同步是指多个线程协调它们的执行顺序&#xff0c;以确保它们正确、安全地访问共享资源。在并发编程中&#xff0c;当多个线程同时访问共享数据或资源时&#xff0c;可能会导致竞争条件&#xff08;Race Condition&#xff09;和其他并发问题 所…

【深度学习 | 风格迁移】神经网络风格迁移,原理详解附详细案例源码

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

HackerGPTWhiteRabbitNeo的使用及体验对比

1. 简介 WhiteRabbitNeo&#xff08;https://www.whiterabbitneo.com/&#xff09;是基于Meta的LLaMA 2模型进行特化的网络安全AI模型。通过专门的数据训练&#xff0c;它在理解和生成网络安全相关内容方面具有深入的专业能力&#xff0c;可广泛应用于教育、专业培训和安全研究…

【教学类-45-02】X-Y之间的“三连减“题(a-b-c=)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-45-01】X-Y之间的三连加题(abc)-CSDN博客文章浏览阅读5次。【教学类-45-01】X-Y之间的三连加题(abc)https://blog.csdn.net/reasonsummer/article/details/135436915 有了三连加怎么能没有三连减&#xff0c;修改参数&am…

实战使用工具appuploader上线发布苹果商店

实战使用工具appuploader上线发布苹果商店 我们发布ios应用的时候&#xff0c;步骤繁琐&#xff0c;非常耗时&#xff0c;appuploader工具就是解决一站式从上传到发布到appstore应用商店的&#xff0c;当我们开发完app后&#xff0c;需要将ipa/apk提交给测试人员测试&#xff0…

智能分析网关V4基于AI视频智能分析技术的周界安全防范方案

一、背景分析 随着科技的不断进步&#xff0c;AI视频智能检测技术已经成为周界安全防范的一种重要手段。A智能分析网关V4基于深度学习和计算机视觉技术&#xff0c;可以通过多种AI周界防范算法&#xff0c;实时、精准地监测人员入侵行为&#xff0c;及时发现异常情况并发出警报…

Linux学习记录——사십 高级IO(1)

文章目录 1、IO2、同、异步IO&#xff08;5种IO类型&#xff09;3、其它高级IO4、非阻塞IO 其它IO类型的实现在这篇之后的三篇 1、IO input&#xff0c;output。调用read或recv接口时&#xff0c;如果对方长时间不向我方接收缓冲区拷贝数据&#xff0c;我们的进程就只能阻塞&a…

HubSpot CRM与数字化营销的完美融合

随着企业数字化转型的推进&#xff0c;HubSpot CRM作为领先的客户关系管理工具&#xff0c;与数字化营销实现了无缝的融合。这种协同作用为企业提供了更全面、智能的客户管理解决方案&#xff0c;推动了销售和市场营销的卓越发展。 数字化营销的潮流 数字化营销已经成为企业推…

SQL-DQL-基础查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…