一. 函数的含义
1. ① 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。JavaScript函数语法,函数就是包裹在花括号中的代码块,前面使用了关键词 function: 当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。
② 简洁来说,通过函数可以封闭任意多条语句,而且可以在任何地方、任何时候调用执行,ECMAScript中的函数使用function关键字来声明,后跟一组参数以及函数体。
二. 如何声明函数?
☆ 声明函数的基本语法和风格可能因编程语言而异,但概念是通用的。以下是几种常见的方法来声明函数:
1. 使用function关键字声明函数。在许多编程语言中,包括JavaScrip,可以使用function关键字来声明函数。这通常包括函数名、参数列表和函数体。例如,在JavaScript中,一个典型的函数声明可能看起来像这样:function myFunction(param1, param2) { // function body }
。
2. 使用Function构造函数创建函数。在JavaScript中,还可以使用Function构造函数来创建函数。这允许在运行时动态地创建函数。例如:var myFunction = new Function(‘param1', ‘param2', ‘return param1 + param2’);
。
3. 使用箭头函数(ES6+)声明函数。ES6及以后的JavaScript版本引入了箭头函数,这是一种更简洁的函数声明方式。箭头函数没有自己的this值,它继承自外部作用域的this值。例如:const myFunction = (param1, param2) => { // function body }
。
注:以上方法都有其特定的用途和优点,选择哪种方法取决于具体的编程语言环境和需求。
4. ① 可以理解为: function 函数名称() {
函数体(就是你要执行的逻辑)
}
② 需要注意的是,函数在默认情况下是不执行的,如果想执行则可以调用函数名称()。
三. 函数的分类
☆ 在JavaScript中,函数分类通常指的是将函数根据其用途或特性进行分组。这种分类可以基于函数的接收参数数量、返回值、功能性质等。以下是几种常见的函数分类方式及其示例:
1. 按照参数数量分类:
A. 参数的分类:
形参:定义函数时所声明的参数,就是形参
实参:调用函数所传递的参数就是实参。
B. 参数的好处:参数可以让函数变得更加灵活。
C. 参数默认值:带有默认值的参数,一般放在最后一个参数位置 。
D. 可变参函数:例如 下列计算任意个数字相加之和
① 无参数函数:
function 函数名称(){
函数体(就是你要执行的逻辑)
}
② 一个参数函数:
function 函数名(参数1, 参数2...){
函数体;
}
③ 多个参数函数:
2. 按返回值分类:
① 有返回值的函数:
② 无返回值的函数:
3. 按功能性质分类:
① 计算函数:
② 过程函数(无返回值):
4. 按照函数是否修改传入函数分类:
① 不修改传入参数的函数:
② 修改传入参数的函数:
四. 函数声明与函数表达式的区别
1. 函数声明指使用function关键字声明一个函数,再指定一个函数名,叫函数声明,function 函数名() {javaScript代码}。
2.函数表达式指使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式。
3. 关于js的执行问题:
☆ js的程序在执行之前,会进行一次预编译操作,预编译操作都做一些什么事情呢?→ 将全局变量和全局函数定义出来 。
4. 函数声明和函数表达式之间的区别:
1. 主要是函数声明提升,意思是在执行代码之前会读取函数声明;
2. 函数声明,会再预编译阶段将整个程序都开辟出来,那么,无论你在什么位置去调用函数声明都可以被执行;
3. 函数表达式,会再预编译阶段将函数名字的空间开辟出来,但是,不会将匿名函数的程序体赋值给这块内存空间,所以,如果你提前调用函数表达式,会报错。
注:函数表达式是定义函数的一种方式,另一种是之前提到的函数声明,更推荐哪种写法更推荐函数表达式写法。
五. 匿名函数
1. 定义:匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
2、创建方式: 一般有名字的函数的创建方式是:function 函数名(参数列表){函数体}如果是创建匿名函数,那就应该是: function(){函数体};很明显能看出区别就是,匿名函数没有名字,因为是匿名函数,所以一般也不会有参数传给他。
3. ① 匿名函数的作用:匿名函数主要有两种常用的场景,一是回调函数(像ajax的异步操作,就需要回调函数),二是直接执行函数。
回调函数的例子:
执行函数的例子:
在上面这段代码中,会顺序输出两个alert框。第一个alert框内容为b,第二个为a。可以看出使用函数直接执行可以限定变量的作用域,使不同脚本的相同变量可以得以共存。
② 除此之外,匿名函数的作用还有:
1.将匿名函数赋值给以变量:函数表达式;
2.赋予一个事件则成为事件处理程序: box.οnclick=function(){};
3. 立即调用匿名函数,防止变量污染;
★ 如何立即调用匿名函数:在JavaScript中,可以通过在函数表达式后面添加括号和跟随一个或多个参数来立即调用一个匿名函数。这种方式通常被称为立即执行的函数表达式(IIFE),下面是一个IIFE的例子:
在这个例子中,一个匿名函数被定义并立即被调用,传递了参数1
和2
。这个模式经常用于创建一个局部作用域,防止污染全局命名空间。
4. 创建闭包。
(1)什么是闭包:函数嵌套函数,内层函数就闭包;
(2)闭包的特点:
--- 作为一个函数变量的一个引用,当函数返回时,其处于激活状态;
--- 一个闭包就是当一个函数返回时,一个没有释放资源的栈区;
--- 闭包中的变量不会随着外层函数执行完毕而销毁。
★ 简单的说,JavaScript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
示例代码:
★ 在上面代码中,str是定义在函数closure中局部变量,若str在closure函数调用完成以后不能再被访问,则在函数执行完成后str将被释放。但是由于函数closure返回了一个内部函数,且这个返回的函数引用了str变量,导致了str可能会在closure函数执行完成以后还会被引用,所以str所占用的资源不会被回收,这样closure就形成了一个闭包。
六. return 关键词
1. 功能(给函数返回一个结果;终止函数的运行):
① 返回控制与函数结果
语法为:return 表达式;
语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去
② 返回控制无函数结果
语法为:return;
在大多数情况下,为事件处理函数如果让其返回false,可以防止默认的事件行为.
2. 返回值:
return true; 返回正常的处理结果.
return false; 返回错误的处理结果;终止处理;阻止提交表单;阻止执行默认的行为.
return; 把控制权返回给页面.
★ 究竟需不需要return来返回值,要看函数是来做什么,如果需要让它返回一个值就写return,如果不需要它返回值,就没必须写它.