博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS--JavaScript函数(匿名函数、闭包函数等)详解
阅读量:2442 次
发布时间:2019-05-10

本文共 2041 字,大约阅读时间需要 6 分钟。

JavaScript函数

JavaScript是函数式编程语言,在JavaScript脚本种可以随处看到函数,函数构成了JavaScript源码的主体。

定义函数

定义函数的方法有两种:

  • 使用function语句声明函数
//方式一:命名函数function f(){
//函数体}//方式二:匿名函数var f = function(){
//函数体}

命名函数的方法也被称为声明式函数,而匿名函数的方法也被称为引用式函数或者函数表达式,即把函数看做一个复杂的表达式,并把表达式赋予给变量。

  • 通过Function对象来构造函数
var function_name = new Function(arg1, arg2, ..., argN, function_body)

在上面语法形式中,每个arg都是一个函数参数,最后一个参数是函数主体(要执行的代码)。Function()所有参数必须是字符串。

示例:

在这里插入图片描述

函数调用

调用函数使用小括号运算符来实现。在括号运算符内部可以包含多个参数列表,参数之间通过逗号进行分隔。

示例:

function f(){
return "hello world!";}document.write(f()); //调用函数,并输出返回值

注意:

  • 一个函数可以包含多个return语句,但是在调用函数时只有第一个return语句被执行,且该return语句后面的表达式的值作为函数的的返回值被返回,return语句后面的代码将被忽略。
  • 函数的返回值没有类型限制,它可以返回任意类型的值。
  • 函数调用的方法还有new运算符、call或apply动态调用等方法。

函数参数

参数可以分为两种:形参和实参

  • 形参:在定义函数时,传递给函数的参数,被称为形参,即形式上参数
  • 实参:当函数被调用时,传给函数的参数,这些参数被称为实参

示例:a,b为形参,23,24为实参

function add(a,b){
return a + b;}alert(add(12,34));

一般情况下,函数的形参和实参个数是相等的,但是JavaScript没有规定两者必须相等。如果形参数大于实参数,则多出的形参值为undefined;相反如果实参大于形参数,则多出的实参就无法被形参变量访问,从而被忽略掉。

示例:

function add(a, b){
return a + b;}alert(add(2)); //返回undefined与2相加的值,即为NaN

JavaScript定义了arguments对象,例用该对象可以快速操纵函数的实质。使用arguments.length可以获取函数实参的个数,使用数组下表(arguments[n])可以获取实际传递给含食宿的每个参数。

示例:

在这里插入图片描述

匿名函数

匿名函数就是没有名称的函数,它相当于一个复杂的表达式。当只需要一次性使用函数时,使用匿名函数会更加有效率。

示例:匿名函数被调用之后,被赋予给变量z。

var z = function(x, y){
return (x + y) / 2;}(23, 35);

函数作为值

函数实际也是一种结构复杂的数据,因此可以把它作为值赋给其它变量

示例:

var a = function(x, y){
return (x + y) / 2;}alert(a(12, 33));//返回22.5

函数作为参数

函数作为值可以进行传递,因此可以把函数作为参数传递给另一个函数,也可以作为返回值。

示例:

var a = function(f, x, y){
return f(x, y);};var b = function(x, y){
return x + y;};alert( a(b, 3, 4) );

函数作为表达式

函数既然可以当作值来使用,因此也可以参与到表达式运算中。

示例:

var a = function(x){
alert(x);}a(50);//提示为50//针对上面的写法,可以直接使用表达式来编写:(function(x){
alert(x);})(50);//提示为50

闭包函数

闭包函数是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包函数就是外部函数被调用后,它的变量不会消失,仍然被内部函数所使用,而且所有的内部函数都拥有对外部函数的访问权限。

示例:定义一个函数a,该函数包含一个私有函数b。内部函数b把自身参数m递加给外层函数的私有变量n上,然后返回n的值。外层函数a的返回值为内部函数b,从而形成了一种内层引用外层的闭包关系,于是外层函数就是一个典型的闭包函数

在这里插入图片描述

这样当在全局作用域中反复调用内部函数时,将会不断把参数值递加给外层函数的私有变量n身上,形成闭包对外部函数的私有变量长时保护作用。

转载地址:http://xisqb.baihongyu.com/

你可能感兴趣的文章
24/7专业家庭安全监控值得吗?
查看>>
注册域名流程_域名注册流程如何工作?
查看>>
HTG回顾Waka Waka:一个不开玩笑的移动式太阳能小工具充电器
查看>>
电脑怎么批量删除作废文件_提醒:删除“如果已删除则作废”标签并不会使您的保修无效
查看>>
usb共享驱动下载_共享数据时,可以通过USB集线器连接的两个驱动器绕过计算机吗?
查看>>
如何使用三星智能开关更新您的Galaxy手机
查看>>
p8h61主板升级cpu_如何升级和安装新的CPU或主板(或两者)
查看>>
未拉手刹撞到前面车的动画_使用手刹批量转换视频
查看>>
如何在Android中锁定屏幕方向
查看>>
facebook时间序列_为什么按时间顺序排列的Facebook订阅源永不回来
查看>>
java与移动智能设备开发_移动时,您应该如何处理所有智能家居设备?
查看>>
计算机组成原理实验 ram_从理论上讲,您可以在64位计算机中放置的RAM最大数量是多少?
查看>>
多线程计算多分批计算_如何在Excel 2013中更改自动计算和多线程功能
查看>>
facebook浏览器插件_Facebook容器将Facebook与Firefox浏览器的其余部分隔离开
查看>>
从iphone复制视频报错_如何在iPhone上复制照片和视频
查看>>
自定义生成excel模板_如何在Excel中创建自定义模板
查看>>
此乃谎言_停止相信电视的谎言:关于“增强”图像的真实真相
查看>>
java 初学者_初学者:如何在Outlook 2013中创建,管理和共享日历
查看>>
word 禁用dtd_如何清除或禁用Microsoft Word 2016中的最近文档列表
查看>>
如何在Microsoft Word中使用Excel样式的电子表格
查看>>