“JavaScript设计得最出色的就是它的函数的实现。” -- 《JavaScript语言精粹》

函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能。

1.函数的功能

代码重复性使用

模块化编程

2.语法:

使用函数前要先定义才能使用

函数定义有三个部分:函数名,参数列表,函数体

格式:

 function 函数名([参数1, 参数2, ...]){

   函数执行部分;

   return 表达式;

 }

例如:

 <script>
function display(first,second){
alert(first+second);
}
var i=10;
var j=20;
display(i,j);
</script>

在上面这个例子当中,first,second是形参,i,j是实参。

在函数执行过程中,形参值得改变不会影响实参。(按值传递)

但是对象数据类型,是按引用传递(按地址传递),其他数据类型都是按值传递。

比如,下面的例子,运行的结果是“aaa”

 <script>
function display(obj){
obj.name='aaa';
}
var p= new Object();
p.name = 'bbb';
display(p);
alert(p.name);
</script>

3.关于函数的返回值问题

函数遇到return会立即返回,后面代码不执行。

4.关于匿名函数

在JS当中每一个变量,包括函数都算是一个对象,都占据了内存地址。函数也是一种对象,占据了内存地址。内存包括,堆内存,栈内存,静态区和代码段。一般来说,变量名保存到栈内存中,变量对象的数据保存带堆内存当中。因为堆比栈大,但栈比堆快。函数会保存到内存当中的代码段中。代码段中的数据的引用是通过栈内存中的一个名字指向的。

 <script>
//变量是可以保存数据的,也可以保存地址的
var i=10;
alert(i); function display(){
alert('123');
} i=display; //变量指向了这个函数的首地址
i(); //弹出123
</script>

在上面这个例子中,function display(){} 其实是,在window对象下添加一个叫display的变量,它指向了这个函数的首地址。其中i=dispaly的意思就是,我们让window对象下的i指向这个函数的首地址。

匿名函数的用法

 <script>
//匿名函数的前期
var i=function display(){
alert('123');
}
i(); //匿名函数的用法
var j=function(){
alert('123');
}
j();
</script>

5.自调用匿名函数

格式: (function(){})();

function(){} : 相当于返回首地址

(function(){}) : 把这部分看作是一个整体

(function(){})() : 相当于找到这个地址并执行

 <script>
//自调用匿名函数
(function(){
alert('111');
})(); //带参数的自调用匿名函数
(function(para){
alert(para);
})(222);
</script>

自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一次,一般用于初始化。

6.全局变量与局部变量

 <script>
i=10; //全局变量
var j=20; //全局变量
function display(){
var k=30; //局部变量
P=40; //全局变量
}
</script>

在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。

机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。

局部访问全局通过作用域链,全局访问局部要通过闭包。

7.arguments的使用

在一个函数内部,可以使用arguments属性,它表示函数的形参列表,是以数组形式体现的。

在定义一个函数的时候,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,这个时候就要使用arguments。

 <script>
function showname(){
//没有定义形参,那么所有形参会自动存放到arguments这个属性数组中
for(var i=0;i<arguments.length;i++){
document.write(arguments[i] + '<br>');
}
}
showname('zhangsan','lisi','wangwu');
</script>

没有定义形参,那么所有形参会自动存放到arguments这个属性数组中。

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用的更多相关文章

  1. Python基础之函数参数与返回值进阶

    参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...

  2. JS基础语法---函数---介绍、定义、函数参数、返回值

    函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...

  3. 关于fork( )函数父子进程返回值的问题

    fork()是linux的系统调用函数sys_fork()的提供给用户的接口函数,fork()函数会实现对中断int 0x80的调用过程并把调用结果返回给用户程序. fork()的函数定义是在init ...

  4. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  5. 【C语言入门教程】5.1 函数说明 与 返回值

    C 语言是结构化语言,它的主要结构成分是函数.函数被作为一种构件,用以完成程序中的某个具体功能.函数允许一个程序的各个任务被分别定义和编码,使程序模块化.本章介绍 C 语言函数的设计,如何用函数分解程 ...

  6. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  7. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  8. 9 - Python函数定义-位置参数-返回值

    目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...

  9. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  10. python开发初识函数:函数定义,返回值,参数

    一,函数的定义 1,函数mylen叫做函数名 #函数名 #必须由字母下划线数字组成,不能是关键字,不能是数字开头 #函数名还是要有一定的意义能够简单说明函数的功能 2,def是关键字 (define) ...

随机推荐

  1. JS冒泡排序(div)

    更生动的排序动画. 通过改变div的高度来实现排序,通过闭包来实现for循环的睡眠时间. <!doctype html> <html lang="en"> ...

  2. js模拟抛出球运动

    js练手之模拟水平抛球运动 -匀加速运动 -匀减速运动 模拟运动有些基本的思路,当前所在点的坐标,元素的长宽是多少,向右/向下运动x/y增加,向上/向左运动x/y减少,运动的路程是多少,用什么方程进行 ...

  3. React 学习,需要注意几点

    最近要开始学习 React 框架了,在学习的过程中,个人作为一个新手觉得需要注意的一些问题 小细节有以下几点: 1:在JSX语法当中,如果遇到 HTML 标签(以 < 开头),将用 HTML 规 ...

  4. [VijosP1639]机密文件 题解

    题目大意: m个人抄n份资料,资料有编号,每人抄连续的几份资料,每份资料页数不一定相等,每个人抄的速度相同,求使得总时间最少的方案(总时间相同,越前面的人抄的越少) 思路: 假设每人一天抄一页,二分天 ...

  5. js 判断浏览器和ie版本号 收集

    function testB () { // body... var isOpera = !!window.opera ||!!window.opr|| navigator.userAgent.ind ...

  6. 整理ViewController的生命周期和加载过程

    按照执行顺序排列 - initWithCoder:通过nib文件初始化时触发 - awakeFromNib:nib文件被加载的时候,会发送一个awakeFromNib的消息到nib文件中的每个对象 p ...

  7. Go 语言的基本数据类型

    Go 语言的基本数据类型 0)变量声明 var 变量名字 类型 = 表达式 例: 其中“类型”或“= 表达式”两个部分可以省略其中的一个. 1)根据初始化表达式来推导类型信息 2)默认值初始化为0. ...

  8. Struts2中跳转问题

    struts2 跳转类型 result type=chain.dispatcher.redirect(redirect-action) dispatcher 为默认跳转类型,用于返回一个视图资源(如: ...

  9. eclipse tomcat add and remove工程异常

    1  eclipse导入工程后,右击server add and remove工程时,there are no resource: 解决方案:右击工程->单击property->选择pro ...

  10. Linux入门之路

    一.linux简介 Linux前身:Minix,由Andrew S. Tanenbaum教授参考Unix编写 Linux创始人:Linus Torvalds Linux内核版(只有内核)和发行版(在内 ...