简单分析javascript中的函数


Posted in Javascript onSeptember 10, 2016

在脚本语言JavaScript中,函数的定义是由事件驱动或者当它被调用时可重复使用的代码块。在JavaScript的标准ECMAscript中,把函数表述为可以随时随地运行的语句。我个人是不认同ECMA的说法的,因为函数只有在发生调用的时候才会执行,否则就是一段毫无生气的代码。

我们来具体认识认识函数。

(一)首先是函数的定义: 在ECMAscript函数的定义是 关键字function 函数名( 参数){主体;return(返回值)};这四部分组成的,但是在脚本语言中函数的定义却分为三种方式定义:

形式1:function 函数名(参数){主体;返回值};这种定义的方式和ECMAscript的方式一样;
形式2:var 函数名=function (参数){主体;返回值};
形式3:var 函数名=new Function (参数){主体;返回值};

在Javascript中只有这三种定义函数的方式,接下来说说每一种定义方式的使用的注意事项和具体的用法:第一种定义方式是最简单,最容易理解的,他就是简简单单的为我们定义一个函数,供我们在接下来的编程中使用;第二中方式是通过我们构造一个匿名函数,并且把这个匿名函数的传递给一个我们定义的函数变量来实现的,他在闭包中是很常见的,为的是使在全局域内,我们能使用内层函数,让我们的函数形成闭包结构。第三种方式是通过new出一个新的内存空间存放我们的匿名函数,并赋值与我们定义的函数名,这个函数是基于我们的匿名函数创建的。这种方式主要应用在原型里面。

其实通过观察,我们会发现,好像这三种定义方式之间联系很紧密,感觉第三种第一方式好像是前面2种和第三种的组合使用,实事也是你看到的这样,所以对于这3种定义方式我们知道就行了,知道他们分别什么时候使用就好了。再有,我要说的是这三种定义方式的数据类型,是基于基本类型来说的,和基于对象类型的数据是一样的,在基于对象数据类型里,我们把函数称为对象。当你接触了对象的定义时,很明显的发现,他们的定义方式基本上是一样的。只不过函数名给称为对象,定义的形式是很类似的。记住一点,对象就是函数,函数就是对象。

(二)几种特殊的函数
(1) 匿名函数
所谓的匿名函数,就是没有函数名的函数。这种函数的有点就是说,它的调用很难,这也就保证了安全性。那么我们应该如何调用匿名函数呢?来看个例子:

简单分析javascript中的函数

通过把匿名函数作为参数传递给add变量,我们就可以调用我们的匿名函数了。

(2)自调函数
自调函数也是匿名函数的一种,它没有作为参数传递给其他变量,也没有自己的函数名,也就是说它不能被别人调用,只能自己调用自己。

简单分析javascript中的函数

图中写的方式就是自调函数的使用,这个函数被两个小括号包围着,第一个小括号的作用是封装,把我们编写的匿名函数封装在其中,第二个小括号就是调用了,我们还可以给他初始化,就像第二个自调函数的写法一样。  

其实自调函数主要用于实现一次性的功能,就是说在执行周期内只运行一次,所以在我们进行网页的初始化时,可以考虑使用自调函数。

(3)回调函数

回调函数,就是把自身作为返回值或者实参传递的这样的函数。

简单分析javascript中的函数

函数a()和b()就是回调函数的应用。

(4)内部函数

这个就是一句话了,就是存在于函数内部的一类函数。

(三)函数的优点

1.大量重复的语句写在函数里面,可以重复的调用;
2.简化编程语言,让编程变得模块化;
3.优化代码结构;

(四)注意事项 

1.函数的书写时,可以先调用,在书写;因为JavaScript在程序开始时,会对我们所有的函数和变量进行隐式的声明;
2.函数不会自己执行,只有在发生函数调用时,才会分配空间,才能使用;
3.函数名相同时,默认执行写在下面的函数;
 4.函数名若有一个单词构成,则首字母小写,若有多个单词构成,第一个单词后其他单词首字母大写;

(五)函数的变量域

1.全局变量
写在全局域的变量称为全局变量;
2.局部变量
定义在函数内部,并用var 声明的变量称为局部变量;如果定义在函数内部,但未用var 声明,则看做是全局变量。

我们要清楚的知道,学习JavaScript语言就是学习各种各样的函数,所以对于函数的理解一定深刻一些,不然在以后的学习过程中,我们会遇到各种函数的嵌套啊,什么的各种函数糅杂在一起,就会更加的理不清头绪,整的自己那袋混乱的。这篇简简单单的文章,是我对函数的一些理解,希望我的这些浅见,能对你理解函数有一些帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 Javascript
javascript实现节点(div)名称编辑
Dec 17 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
深入理解Javascript中的作用域链和闭包
Apr 25 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
Jun 04 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
Dec 03 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 Javascript
php结合js实现多条件组合查询
May 28 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
javascript数组常用方法汇总
Sep 10 #Javascript
JavaScript实现输入框与清空按钮联动效果
Sep 09 #Javascript
Three.js快速入门教程
Sep 09 #Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 #Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 #Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 #Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 #Javascript
You might like
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
AngularJS快速入门
2015/04/02 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Python中文件操作简明介绍
2015/04/13 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
小学作文评语大全
2014/04/21 职场文书
端午节活动总结报告
2015/02/11 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技