JS-几类函数

JS-几类函数

命名函数、匿名函数、自调用函数、回调函数;函数声明、函数表达式

函数声明

function foo() {}//函数声明:function functionName (){  } 对于函数声明,函数的名称是必须的

解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问)。

alert(sum(1,1));
function sum (a,b){return a + b;
}

以上代码可以正常执行。因为在代码执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中 。在对代 码求值时,Javascript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码放到了调用它的代码的后面,Javascript 引擎也能把函数声明提升到顶部。

函数表达式

var fuc = foo(){}//函数表达式:function functionName[可选](){  }对于函数表达式,函数的名称是是可选的

解析器在向执行环境中加载数据时,必须要等到解析器执行到它所在的代码行,才会真正被解释执行。
如果像下面例子所示,把上面的函数声明改为函数表达式,就会在执行期间导致错误。

alert(sum(1,1));    //出错
var sum = function sum (a,b){return a + b;
}

注意:如果没有函数名的话,一定就是函数表达式 !!!

命名函数

函数如果有名字,就是命名函数

function f1(){console.log("这个函数就是命名函数");
}

匿名函数

函数如果没有名字,就是匿名函数

function (){console.log("这个函数就是匿名函数");
}

注意:匿名函数不能直接调用

自调用函数

自己调用自己
注意:这样函数不会冲突

(function(){console.log("这是函数的自调用");})();//这个函数就是函数自调用
//解释:
var f1 = function(){console.log("你好!");
};
f1();
//解释:f1里面存储的就是函数代码,通过f1加()的方式调用,没有f1变量的时候,直接在代码后面加上()就可以调用,叫函数的自调用

回调函数

函数作为参数调用

//函数声明,fn是变量,fn是参数
function f1(fn){fn();//函数调用----说明fn这个变量中存储的是一个函数
}
function f2(){console.log("函数可以作为参数使用");
}
f1(f2);//调用f1,将f2作为参数传进去
//结果:函数可以作为参数使用

几个需要注意的问题:

★.函数名里面存储的就是函数代码

function f1(){console.log("这是一个函数");
}
console.log(f1);//打印出来的结果就是上面的函数代码
f1();//这是函数的调用

★.函数表达式:把匿名函数赋给一个变量

var f2 = function(){console.log("把匿名函数赋给一个变量");
};
f2();//f2中存储的就是函数代码,用变量名加()就是函数调用
注意:函数表达式后面赋值结束后要加分号

★.函数的覆盖问题:如果函数名重复,下面的函数会自动覆盖上面的函数代码

function f1(){console.log("这是函数一");
}
function f1(){console.log("这是函数二");
}
f1();//此时打印的结果是:这是函数二
注意:
var f1 = function(){console.log("这是函数表达式1");
};
f1();//结果是:这是函数表达式1f1 = function(){console.log("这是函数表达式2");
};
f1();//结果是:这是函数表达式2
f1();//结果是:这是函数表达式2解释:因为这是函数表达式,所以第一次调用的时候是f1调用上面的代码,接下来又给变量f1重新赋值后,f1里面存储的就是后面的赋值结构果了

★.函数可以作为返回值

function f1(){return function(){console.log("这是被返回的函数");};
}
var f = f1();//f1函数的调用,此时f就是函数l
f();//调用函数,结果为:这是被返回的函数

参考网址:

  1. Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式

  2. JS中的命名函数,匿名函数,自调用函数和回调函数

转载于:https://www.cnblogs.com/Shinea_SYR/p/9336133.html

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

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

相关文章

PHP Warning: date() [function.date]解决方案

PHP Warning: date() [function.date]: It is not safe是什么问题在用PHP5.3以上的PHP版本时,只要是涉及时间的会报一个"PHP Warning: date() [function.date]: It is not safe to rely on the systems timezone settings. You are *required* to use the date…

mysql数据排序指令_MySQL 排序 | 菜鸟教程

MySQL 排序我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。语法以下是 SQL SELECT 语句使用 ORDER BY 子句将…

Total commander 之F3 图片

使用TC 一段时间了,用F3快速查看图片,总是打开二进制数据 开始一直懒,没有管,今天决定揪出懒虫 其实很简单,google几下就出来了 原来要下载个SGViewer 插件 另外还有个高级技巧,暂时没搞,先记在…

mysql配置环境变量(win 10)_mysql配置环境变量(win 10)

1、安装完mysql后就需要配置环境变量 (win 10)选择“我的电脑”,单击右键,选择“属性->高级->环境变量中的系统变量,对 MYSQL_HOME、Path 这 2 个系统变量分别设置如下相应的值(设置原则:如果存在相应的变量,直接…

017-通过govendor管理依赖包

1:安装 go get -u github.com/kardianos/govendor 2:配置环境变量 需要把 $GOPATH/bin/ 加到 PATH 中 D:\my_workspace\go_ws\bin 3:在$GOPATH/src目录下新建测试工程go_test,然后再此目录下新建src目录 4:在go_test目录执行&…

Difference between CGLIB JDK Dynamic Proxies

As we know, create proxy in runtime, we can use two different techniques, CGLIB or JDK dynamic proxies, whats different between them? when should we use CGLIB? and when should we use JDK proxies? here we have short view about it.JDK dynamic proxiseIf th…

mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare

sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪。sql server中变量要先申明后赋值:局部变量用一个标识,全局变量用两个(常用的全局变量一般都是已经定义好的)…

《鸟哥的Linux基础》

硬件设备 LINUX历史 主机规划与磁盘分配 man , info 文件权限与目录配置 SUID: 二进制程序的执行者可以获取root的权限SGID: 目录或文件的执行者可以获取改程序群组的权限SBIT: 目录下创建的文件或目录只有创建者有权限删除r: 文件: 可读目录: 可获取文件列表w:…

[JavaScript]return false;和e.preventDefault();的区别

function() {return false; }// IS EQUAL TOfunction(e) {e.preventDefault();e.stopPropagation(); }参考: 1.The difference between ‘return false;’ and ‘e.preventDefault();’ 2.Event order

pythontuple([1、2、3)_Python 语句\nprint(tuple([1,2,3]))\n的运行结果是

在5%之的阶段化率城市发展间的阶段加速是城市化,语句运行表明展的各国共同规律化发城市世界。结果礼仪又叫距离距离私人。语句运行作高尔奠基会主义现义的基的是社实主。表述下列对此的是错误,号文年中出央一件提,品价重要制和制度革完格形农…

图解物联网pdf

下载地址:网盘下载 本书图例丰富,从设备、传感器及传输协议等构成IoT的技术要素讲起,逐步深入讲解如何灵活运用IoT。内容包括用于实现IoT的架构、传感器的种类及能从传感器获取的信息等,并介绍了传感设备原型设计必需的Arduino等平…

Silverlight实例教程 - Out of Browser的自定义应用

在上两篇教程中,讲述了Silverlight的Out of Browser理论知识和基础实践。本节将讲述如何创建自定义的Out of Browser应用以及如何调试Silverlight的Out of Browser应用。Silverlight Out of Browser的自定义化从Silverlight 4开始,OOB应用支持信任权限设置和窗口自定…

第二十四天

2018-07-22 今天就只能写昨天的内容了, 昨晚早上依旧还是我来到图书馆进行读书 你在宿舍里面 下午,我也待在宿舍看了一个下午的电影 中午,睡到了三点 最近的状态都是如此, 把时间浪费在睡觉上面 你本可以做你想要做的任何事情 可你…

python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能

怎么在Python3.5 中利用OpenCV实现一个手势识别功能发布时间:2020-12-22 11:56:32来源:亿速云阅读:67作者:Leah怎么在Python3.5 中利用OpenCV实现一个手势识别功能?相信很多没有经验的人对此束手无策,为此本…

上班玩手机被辞退

今天下班回来,看到脉脉上的一则信息,有一位同学从事IOS开发,但是因为公司没有项目做,然后就只能闲着没事干。公司想辞退这位同学,但是又想不出好的办法,因为他确实没有做什么违反纪律的事。然后猛生一记&am…

CSP 1.0 语言规范

为什么80%的码农都做不了架构师?>>> 点击在线查看wiki版本:CSP1.0语言规范 点击下载PDF版本:CSP1.0语言规范 转载于:https://my.oschina.net/akee/blog/6020

python进阶之装饰器之3如何利用装饰器强制函数上的类型检查

先占坑转载于:https://www.cnblogs.com/max520liuhu/p/9349358.html

有源蜂鸣器和无源蜂鸣器的区别_电磁式蜂鸣器和压电式蜂鸣器的区别以及驱动方法...

蜂鸣器是设计电子产品时比较常用的发声元器件,根据工作原理的不同,可以分为电磁式蜂鸣器和压电式蜂鸣器。在开发板、实验板上常用的蜂鸣器为电磁式蜂鸣器。这两者最大的区别在于工作原理。下面详细介绍其工作原理。1 电磁式蜂鸣器的工作原理电磁式蜂鸣器…

Linux 30岁了~我们也老了

1991年8月25日~2021年8月25日Linux 从诞生到现在,经历了 30 个岁月,这段时间不算太长,但是也并不短。我2012年校招在TCL,那时候正好是TCL30周年,也正因为是30周年,集团举行了篮球比赛,所以我们打…

第三章 MongoDb Java应用 3.2

下面来看看3.1的运行结果: 运行结果: { "_id" : { "$oid" : "4c2845d8735efe55298d0dc9"} , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info&…