理解函数

一、函数的基本概念

通过函数可以封装任意多条语句,可以再认可地方/时候调用执行。基本语法:
function functionName(arg0,arg1,…argN){
statements
}

1、返回值

ECMAScript种的函数在定义时(参数中)不必指定是否返回值。
未指定返回值的函数返回的是一个特殊的 undefined 值。
任何函数在任何时候都能通过return语句后跟要返回的值实现返回值,位于return语句后的任何代码永不会执行。

2、参数

	参数在内部用数组来表示,函数只接收数组。
	通过arguments对象可以访问参数数组,其length属性获得参数数量。该长度由传入参数决定,而不是定义时命名的参数个数决定。
	命名的参数只提供便利,但不是必须。

3、不能重载

	由于不存在函数签名的特性,ECMAScript 函数不能重载。
	如果在 ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。
	通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。

二、Function类型

函数实际上是对象,因此函数名实际上是指向函数对象的指针,不会与某个函数绑定。
每个函数都是Function类型的实例,与其他引用类型一样具有属性和方法。

1、定义函数的方式:

1.函数声明:
function sun(num1,num2){
statements;
}

2.函数表达式
var sum = function (num1,num2){
statements;
};
注意这里函数末尾有分号,因为是声明一个变量的语句。

3.Function构造函数
var sum = new Function (“num1”,“num2”,“return num1+num2”); //不推荐

2、函数声明和函数表达式的区别

解析器会率先读取函数声明,并使其在任何代码钱可用,即函数声明提升;
函数表达式则是声明变量,必须执行该代码行才能被引用和解释。

3、函数作为值传递

要访问函数的指针,而不执行函数,则需要去掉函数名后的圆括号。

4、函数内部属性

(1)arguments

类数组对象,包含传入函数的所有参数。它有一个callee属性,指向拥有这个arguments对象的函数,即arguments.callee

(2)this

this引用的是函数据以执行的环境对象。再网页全局调用函数时,this就是window

5、函数的属性和方法

ECMAScript中的函数是对象,因此也有属性和方法。

(1)属性

length:表示函数希望接收的命名参数的个数。functionName.length
prototype:是保存它们实例方法的真正所在。诸如toString()和ValueOf()等方法实际上都保存在其名下。

(2)方法

每个函数都包含2个非继承而来的方法:apply()和call()。用途是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
apply()方法接收2个参数:在其中运行函数的作用域+参数数组
call()方法与apply()方法作用相同,区别在于接收参数方式不同。必须明确传入每个参数,逐个列举出来。
除了传递参数,主要作用是扩充函数赖以运行的作用域。好处是对象不需要与方法有耦合关系。

bind()方法:创建函数的实例,this值绑定到传给该函数的值。

三、闭包
这个地方看阮一峰写的文章发现非常清晰明了。http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
1、执行环境及作用域
当某个函数被调用时,会创建一个执行环境及相应的作用域链。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值