JavaScript中的Function

**

一、Function

**

什么是:

     用途:保存一段可重用的代码段的程序结构,再起一个名字。本质:内存中保存一段代码段的存储空间------对象为什么:只要一段代码,可能被反复使用时,都要定义在一个函数内,再起一个名字。今后,用函数名等于代码段。

如何:

1、创建函数:3种:

  1.以声明式方式创建:function 函数名(形参列表){函数体return 返回值}形参:什么是:专门接收从函数外部传入函数内数据的变量为什么:有些函数执行时,需要动态获得必须的数据,才能正常执行。何时:只要一个函数,必须某些数据才能正常执行时。返回值:什么是:一个函数的执行结果为什么:外部调用者可能需要获得函数的执行结果何时:只要外部调用者,需要获得函数的执行结果时。问题:会被声明提前(hoist)

什么是:在程序开始执行前!程序会先将var声明的变量和function声明的函数,提前到当前作用域的

顶部集中创建。而赋值(=)留在原地。

所以声明提前是js中广泛诟病的缺陷,打乱了程序正常的执行顺序

                  2.赋值方式创建:var 函数名=function(形参列表){函数体return     返回值} 说明:赋值方式创建的函数,和声明方式创建的函数在使用时,是完全一样的只不过,在程序开始执行前,赋值方式可避免函数被声明提前。保持了程序原有的执行顺序揭示:js中其实函数也是一个普通的对象而已。函数名仅仅是一个普通的变量。函数名变量通过对象地址引用着函数对象。

2.调用函数:

var 变量=函数名(实参值列表)

调用函数名,等于调用函数中的函数体

实参值以赋值的方式传递给形参变量

如果函数有返回值,则用变量接住。

强调:如果一个函数,只是定义,而没有调用,

其内部的代码是不执行的!即使出错!也不执行的!即使写错!也不会发现,也不报错!!

3.用new 创建:(几乎不用)

var fun=new Function(“形参1”,“形参2”,“…”,“函数体和返回值”);

**

二、重载(overload)

**

什么是:多个同名函数,不同形参列表。在调用时,可根据传入实参列表的不同,

动态选择匹配的函数执行。

为什么:减少函数个数,减轻调用者负担1

何时:只要一件事,可能根据传入的参数不同,执行不同的逻辑时,都要用重载!

如何:

问题:js不支持标准的重载写法。因为js不允许多个同名函数同时存在!

解决:js中借助于arguments对象来实现重载

什么是:每给函数内自带的,专门接受所有传入参数的实参值列表的类数组对象。

函数内自带的:不用创建可直接使用。

接受所有传入函数的实参值:即使没有定义形参变量,或形参变量个数少于传入

的实参个数,都没关系!arguments可接住所有传入函数的实参值。这就是为什么

js中的函数,定义了几个形参和调用传入几个实参,毫无关系。

类数组对象:长得像数组的对象

像数组:1.下标 2.length

不是数组:是对象,不是数组家的孩子。

何时:只要js中接收不确定个数的参数值,都用arguments。

如何:

1.无论传入多个参数,都只定义一个函数。

2.在函数内直接访问argumens,根据arguments的不同,

动态选择不同的逻辑执行任务。

两步:

1.定义函数时:

       function 函数(一个形参变量 obj){//先判断obj对象中包含哪些属性,不包含哪些属性。缺少的属性用默认值代替//函数执行过程中,都从对象里,取实参值使用!

}

但是,我们规定,将来调用时,所有实参值都要放在一个对象中传入

2.调用函数时:

函数名({属性1:实参值1,属性2:实参值2,...})

优点:任意参数都可以缺少!都不会报错

**

三、匿名函数

**

     什么是:定义函数时,不被任何变量引用的函数为什么:1.节约内存;2.划分临时作用域何时:1.如果一个函数只用一次时2.划分临时作用域如何:1.回调函数:今后绝大多数回调函数都要定义为匿名函数----节约内存2.匿名函数自调:定义函数后,立刻调用函数,调用后立即释放问题:全局变量极易被污染!所以,今后禁止使用全局变量!解决:今后所有js代码,都要包裹在匿名函数自调中好处:绝对不会产生全局变量,节约内存,又不影响功能的执行。

全局变量

var start=new Date();
alert(开始加载页面内容,at:${start.toLocaleString()});
回调函数

function fun(){
var start=new Date();
alert(开始加载页面内容,at:${start.toLocaleString()});
}
fun();

匿名函数自调用

(function(){
var start=new Date();
alert(开始加载页面内容,at:${start.toLocaleDateString()});
})();

**

四、作用域

**

1.作用域(scope)

什么是:用途:作用域就是一个变量的可用范围本质:作用域是保存变量的一个对象为什么:为了避免不同范围的变量间互相干扰!包括:js中只包括2级作用域1.全局作用域:保存任何地方都可以访问到的变量的区域-----window对象在全局作用域中保存的变量称为全局变量全局变量:优点:公用,可反复使用缺点:已被污染,浪费内存2.函数作用域:保存仅在函数内才可使用的变量的区域-----函数作用域中保存的变量时局部变量局部变量:优点:仅在函数内可用,不会污染全局,

且用完就释放,不占用内存!

                                    缺点:无法重用!js中没有块级作用域:块级作用域:if else else if  while do while for 这些程序结构的{},

在js中都不是一级作用域!

                                    js中 if   else   else if   while   do while   for 这些程序结构的{}都不是作用域!js中:if(){}里写的变量,出了if还能用!for()里写的变量,出了for,就还能用vs java 是三级作用域:全局作用域、函数作用域、块级作用域块级作用域:if else else if  while do while for 这些程序结构的{},

在java中也是一级作用域,所以,java中也是一级作用域:

                            if(){}里写的变量,出了if就不能用!for(){}里写的变量,出了for,就不能用程序和函数的执行过程:当程序开始执行时,先创建全局作用域对象window在window中,先保存所有全局变量和全局函数当定义函数时,每个函数其实都有一个“好友列表”,暂时包含两项。

离自己最近的一项暂时是空的。离自己远一些的一项保存着指向window对象的地址。

“好友列表”的作用是,将来调用函数时,万一缺变量,可按照好友列表的顺序,去朋友中找!

   当调用函数时,会临时创建这次调用函数的函数作用域对象。并在函数作用域对象中添加函数的局部变量。并将函数作用域对象的引用加入函数

的好友列表中最近的一项中保存!说明函数和临时创建的函数作用域对象,关系最好!缺变量,先找

临时创建的函数作用域对象。如果函数作用域对象没有,才被迫找window要。

    当函数调用后,临时创建的函数作用域对象被释放,函数作用域对象中的局部变量同时释放!

–这就是为什么局部变量不可重用的原因!

**

五、作用域链:(Scopes)

**

      其实"好友列表",就是一个函数的作用域链什么是:一个函数可用的所有作用域对象的集合。普通函数的作用域链,在调用时是两个成员:1.离自己最近的是临时创建的函数作用域对象2.离自己稍微远一些的是全局作用域对象window一个函数的作用域链:1.保存着这个函数可用的所有变量2.控制着变量的使用顺序:先局部,后全局           

**

六、闭包(closure)

**

什么是闭包:

    用途:即重用一个变量,又保护变量不被污染的一种编程方法。本质:外层函数的作用域对象,被内层函数对象引用着,无法释放。

这个外层函数的作用域就是闭包。

    为什么:全局变量和局部变量都有不可兼得的优缺点:全局变量:优:可重用        缺点:易被污染局部变量:优:不会被污染  缺点:不可重用何时:今后,只要为一个变量保存一个专属的,可重用的,还不会被外部污染的变量。如何:3步:1.外层函数包裹要保护的变量和内层函数内层函数一定要使用了外层函数的局部变量2.外层函数将内层函数抛出到外部3.调用者调用外层函数,获得返回的内层函数对象,保存在变量中。并反复使用。闭包是如何形成的:外层函数的作用域对象,被内层函数对象引用着,无法释放。闭包的缺点:1.比普通函数占用更多的内存,多占用父母的函数作用域对象2.闭包不会自动释放,可能造成内存泄漏。解决:使用完闭包后,如果不再使用了,要手动释放闭包。闭包:pay=null;

单词列表:

1.overload 重载

2.argument 参数

3.scope 范围

4.closure 封闭

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

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

相关文章

Shell 学习笔记 - 变量的删除、替换和替代 + 变量中的特殊符号

1.9 Shell 变量的删除、替换和替代 Linux 提供一些可以直接对变量进行操作的符号。通过这些符号,变量中的部分内容可以被删除、替换和替代。在 Shell 中,变量的删除、替换和替代也是非常重要的。通过简单操作修改变量,可以减少代码的行数并提…

docker怎么拉取全部镜像,打包所有镜像

因为docker,所以我把电脑上之前的镜像全部打包出来了 你们也可以打包,我提供一个脚本,你运行即可 export_docker.sh #!/bin/bash# 导出目录 EXPORT_DIR"docker_images_backup" mkdir -p "$EXPORT_DIR"# 获取所有镜像 …

编程第一课名字怎么写:创意、吸引力与实用性的完美结合

编程第一课名字怎么写:创意、吸引力与实用性的完美结合 在编程教育的世界里,为第一课起一个引人入胜的名字至关重要。这个名字不仅要能够吸引学生的注意,还要能够准确地传达课程的核心内容和价值。那么,如何为编程第一课起一个既…

PythonPoc基础编写(3)---批量刷cnvd

文章目录 前言一、发现过程二、使用步骤1.引入库2.读入数据结果 总结 前言 想刷cnvd?最重要的是登录进行测试功能点 一、发现过程 找到一个网站 发现登录失败返回200 登录成功则是重定向 302 那就写一个脚本吧 二、使用步骤 1.引入库 import requests 2.读入…

Docker容器技术在Linux平台的应用与实践

Docker容器技术自推出以来,迅速成为Linux平台上应用部署和微服务架构的首选方案,它通过轻量级的隔离机制,实现了应用程序及其依赖环境的一致性部署与管理。以下是Docker容器技术在Linux平台上的主要应用与实践领域: 1. 应用快速部…

Web Works API 和 Promise 的对比和区别

Web Workers 和 Promise 都是强大的工具,用于不同的异步处理场景。Web Workers 适用于需要并行处理的复杂任务,通过后台线程避免阻塞主线程。而 Promise 则简化了单线程中的异步操作管理,使代码更加清晰和结构化。根据具体需求选择合适的技术…

安装AutoCAD异常

问题: 安装Autodesk产品时,显示以下消息,且安装未完成。 正在等待操作系统重新启动。 请重新启动计算机以安装 AutoCAD 2024。 操作系统: Windows 10Windows 11 原因: Windows注册表项已损坏。Microsoft Visual C …

生产环境下部署微调的10条戒律

关于大模型微调部署,openPile,Kyle Corbitt的《Ten Commandments to Deploy Fine-Tuned Models inProd》:https://docs.google.com/presentation/d/1lRrTEDOw7160sU_-PL5bONLOPq_7E8alewvcJ01BCE/edit#slideid.g2721fb6713e_0_44 1、第一戒律:不可微调,直接使用提示…

CDN内容加速原理?

1.用户向浏览器提供要访问的域名 2.浏览器从本地host文件中解析域名,如何host文件没有做任何配置,则浏览器调用域名解析库对域名进行解析,析函数库一般得到的是该域名对应的CNAME记录,从中获取真正的IP地址,此过程中,根据地理位置信息解析对应的IP地址,…

微射流均质机可用于纳米制剂和材料制备 我国市场需求空间广阔

微射流均质机可用于纳米制剂和材料制备 我国市场需求空间广阔 微射流均质机是一种纳米级乳化及分散的处理设备,工作原理是在加压状态下,高压流体经过微细孔径喷嘴后,形成高速微射流,从而产生强大的涡流和切应力,将颗粒…

ESP8266-01S烧录MQTT固件ERROR问题

今天在烧录ESP8266固件时遇到了这个问题,技术客服给了个有效的解决方案。 选择固件的时候可以先确认自己的模块是ESP8266或者EPS8285主控,这在选择DOWNLOADTOOL时还不一样。 然后波特率是115200,我在这个地方选错成1152000。 当然上面都不…

PHP 日期处理完全指南

PHP 日期处理完全指南 引言 在PHP开发中,日期和时间处理是一个常见且重要的任务。PHP提供了丰富的内置函数来处理日期和时间,包括日期的格式化、计算、解析等。本文将详细介绍PHP中日期处理的相关知识,帮助读者全面理解和掌握这一技能。 1. PHP日期函数基础 1.1 date()函…

【ARM Cache 及 MMU 系列文章 1.4 -- 如何判断 L3 Cache 是否实现?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cluster Configuration Register代码实现什么是Single-Threaded Core?什么是PE(Processor Execution units)?Single-Threaded Core与PE的关系对比多线程(Multithreading)Cluster…

LeetCode-day15-522. 最长特殊序列 II

LeetCode-day15-522. 最长特殊序列 II 题目描述示例示例1:示例2: 思路代码 题目描述 给定字符串列表 strs ,返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在,返回 -1 。 特殊序列 定义如下:该序列为某字符串…

用java 做一个模拟的菜单及对话框测试

首先我们要创建一个Menu 的java类 然后接着给上代码 代码如下: package test01;import javax.swing.*;public class Menu extends JFrame{JMenuBar jmb;JMenu jmfile,jmedit,jmhelp;JMenuItem jminew,jmiopen,jmisave,jmisaveas,jmiexit,jmicut,jmicopy,jmipast…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时,确保输入的值合法性是十分重要的。为了实现这一点,你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法,你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

小区噪音监测管理系统设计

一、引言 随着城市化进程的加快,小区居民对于居住环境的要求日益提高。其中,噪音污染已成为影响居民生活质量的重要因素。因此,设计一套小区噪音监测管理系统,对于提升居民的生活品质和小区管理效率具有重要意义。本文将详细阐述…

一五二、go缓存GCache和Go-Redis

GCache 和 Go-Redis 都是 Go 语言中常用的缓存解决方案,但它们适用于不同的场景。以下是它们各自的特点和适用场景。 GCache GCache 是一个内存缓存库,主要用于在单个应用程序实例中缓存数据。它具有以下特点: 本地缓存:缓存数…

React useReducer 使用及 useImmerReducer

useReducer 实际上是以数组上的 reduce() 方法命名的。 传递给 reduce 的函数被称为 “reducer”。它接受 目前的结果 和 当前的值,然后返回 下一个结果。 React 中的 reducer 和这个是一样的:它们都接受 目前的状态 和 action ,然后返回 下一…

数据资产驱动的智能化决策:深度剖析数据资产在提升企业决策效率与准确性中的关键作用

在数字化、信息化日益普及的今天,数据已经成为企业发展的重要资产。数据资产不仅能够帮助企业更好地了解市场需求、优化业务流程,还能在决策过程中提供科学、精准的支持。本文将深入剖析数据资产在提升企业决策效率与准确性中的关键作用,探讨…