您的位置:首页 > Web前端 > JavaScript

JavaScript学习-Function类型

2017-03-26 15:22 218 查看

1,介绍

函数实际上是对象,每个函数都是Function类型的实例。

和其他引用类型一样具有属性和方法。

函数名实际上是一个指向对象的指针,不会与某个函数绑定。

函数可作为参数,返回值来使用。

2,定义

使用函数声明语法定义

function sum(num1,num2){
return num1 + num2;
}


使用函数表达式定义

var sum = function(num1,num2){
return num1 + num2;
}


使用Function构造函数(不推荐,这种语法会导致解析两次代码)

接收任意数量的参数,但最后一个参数始终都被看成是函数体,前面的参数枚举出了新函数的参数,例:

var sum = new Function("num1","num2","return num1 + num2");


3,函数声明与函数表达式

解析器对函数声明和函数表达式并非一视同仁。

解析器会率先读取函数声明(函数声明提升),并使其在执行任何代码之前可用(放到源代码树的顶部)。

函数表达式,必须等到解析器执行到它所在的代码行,才会被解释执行。

除了什么时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法等价。

4,没有重载的深入理解

函数名实际上是一个指针或变量,所以相似的,定义两个相同名字的函数,后者会覆盖前者。

5,函数内部属性

arguments

用来保存函数参数,这个对象还有一个名叫callee的属性,ECMAScript 5 还定义了caller属性

callee

该属性是一个指针,指向拥有这个arguments对象的函数。

caller

在严格模式下访问它对导致错误,在非严格模式下,这个属性始终是undefined。

this

引用的是函数据以执行的环境对象,行为和Java和C#中的this大致类似。

caller

这个属性中保存着调用当前函数的函数的引用,ECMAScript 5规范化了一个函数对象的caller属性。如果是在全局作用域中调用当前函数,它的值为null。

6,函数属性和方法

属性

每个函数都包含两个属性length和prototype

length

表示函数希望接收的命名参数的个数

prototype

prototype是保存引用类型所有实例共享的方法和属性,诸如toString()和valueOf()等方法实际上都保存在prototype名下。

该属性是不可枚举的,无法使用for-in来发现。

如果函数为构造函数,可以理解通过该构造函数创建的那个对象实例的原型对象,原型对象可以让所有对象实例共享它所包含的属性和方法。

默认情况下prototype会获取一个constructor属性,这个属性包含一个指向prototype属性所在的函数的指针。

方法

每个函数都包含两个非继承而来的方法,apply()和call()。这两个方法的用途是为了设置函数体内的this对象的值。

apply()

接收两个参数(1)this所引用的对象,(2)参数数组。其中第二个参数可以使Array的实例,也可以使arguments对象。

call()

与apply()方法作用相同,区别在于接收参数的方式不同,第一个参数是this值没有变化,变化的是其余参数都是直接传递给函数。

apply()和call()的好处

扩充函数来一运行的所用域。

对象不需要与方法有任何的耦合关系。

bind()

这是ECMAScript 5定义的一个方法,其this值会被绑定到传给bind()函数的值。

继承的方法

toLocaleString()和toString(),valueOf()返回函数的代码,主要用在调试代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript class 函数 ivar