美文网首页
Function 类型

Function 类型

作者: 2019吖 | 来源:发表于2018-11-09 16:33 被阅读0次

Function 类型

函数实际上是对象。每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下面的例子所示。

function sum (num1, num2) {

    return num1 + num2;

}

这与下面使用函数表达式定义函数的方式几乎相差无几。

var sum = function(num1, num2){

    return num1 + num2;

};

最后一种定义函数的方式是使用 Function 构造函数。 Function 构造函数可以接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则枚举出了新函数的参数。来看下面的例子:

var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐

从技术角度讲,这是一个函数表达式。但是,我们不推荐读者使用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规 ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。不过,这种语法对于理解“函数是对象,函数名是指针”的概念倒是非常直观的。

函数内部属性

在函数内部,有两个特殊的对象: arguments 和 this 。

arguments 的主要用途是保存函数参数,但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。

this引用的是函数据以执行的环境对象——或者也可以说是 this 值(当在网页的全局作用域中调用函数时,this 对象引用的就是 window )。

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

函数属性和方法

函数是对象,因此函数也有属性和方法。每个函数都包含两个属性: length 和 prototype 。

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

prototype 是保存它们所有实例方法的真正所在。换句话说,诸如toString() 和 valueOf() 等方法实际上都保存在 prototype 名下,只不过是通过各自对象的实例访问罢了。prototype 属性是不可枚举的,因此使用 for-in 无法发现。

每个函数都包含两个非继承而来的方法: apply() 和 call() 。这两个方法的用途都是在特定的作用域中调用函数,作用相同,区别在于接收参数不同。

apply() 方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是arguments 对象。

例如 sum.apply(this, [num1, num2]);  或者 sum.apply(this, arguments);

call() 方法:第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用call() 方法时,传递给函数的参数必须逐个列举出来。

例如 sum.call(this, num1, num2);

这两个方法用于扩充作用域,将作用域传入this位置,使对象不需要与方法有任何耦合关系。

相关文章

  • Function 类型

    定义函数的方式: 函数内部属性 arguments 它是一个类数组对象,包含着传入函数中的所有参数。 虽然 arg...

  • Function类型

    函数声明与函数表达式 声明提前 函数表达式的name无法在函数外使用 name只是地址引用,函数本体在内存堆中 引...

  • Function类型

    作为值的函数 把函数本身作为参数传递 函数的返回值作为参数传递 以我小白的眼光来看,此处容易混淆,值得反复思量。 ...

  • Function类型

    函数实际上是对象。函数名是指向函数的指针。使用不带圆括号的函数名是访问函数指针,而非调用函数。 函数定义 函数声明...

  • Function类型

    一、概念 Function(函数)类型实际上是对象。每个函数都是 Function 类型的 实例,而且都与其他引用...

  • Function 类型

    Function 类型 函数实际上是对象。每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有...

  • Function类型

    函数名仅仅是指向函数的指针,函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字,如下面...

  • Function类型

    1.函数实际上是对象。 2.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。 3....

  • Swift 学习笔记 - 函数与闭包

    函数 使用函数类型 (Using Function Types) 函数类型作为参数类型 (Function Typ...

  • 引用类型-Function类型

    每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法;由于函数是对象,因此函数名实际上也...

网友评论

      本文标题:Function 类型

      本文链接:https://www.haomeiwen.com/subject/bauoxqtx.html