javascript函数解析

在javascript中,函数是第一型对象(First-class Object),可以从以下几个方面来理解。

  • 可以作为参数进行传递
  • 可以赋值给变量、数组或者其它对象的属性
  • 可以嵌套在函数内,就是说函数里面可以再定义函数
  • 可以通过字面量创建,就是匿名函数
  • 可以作为函数的返回值进行返还,就是说可以return一个函数
  • 可以拥有属性和方法,所以说,函数就是一个对象
  • 可以被调用,通常是异步方式

函数的声明方式

1、普通函数

function funcName(param1,param2,...){
    return ...
}

2、匿名函数

var name = function(param1,param2,...){
  return ...
}

3、内联函数

var name = function funcName(param1,param2,...){
  return ...
}

4、构造器函数

function FuncName(param1,param2,...){
  this.xxx = param1;
  this.xxx = param2;
  ...
}

5、立即函数

(function(param1,param2,...){
  return ...
})(arg1,arg2,...);

var a = function(param1,param2,...){
  return ...
}(arg1,arg2,...);

!function(param1,param2,...){
  return ...
}(arg1,arg2,...);

+function(param1,param2,...){
  return ...
}(arg1,arg2,...);

说明:构造器函数就是其他语言中的“类”,需要用 new关键词进行实例化,通常是名词,按编程惯例以 大写字母开头。param1,param2是形参,arg1,arg2是实参。立即函数的本质是把function(){}变成表达式,然后执行,所以我们不能直接用function(){}(),必须先通过 括号、赋值、逻辑运算符或者数字运算符把function(){}变成一个表达式,然后加上括号才能执行。

函数的属性和方法

函数是一个对象,所以它也有自己的属性和方法。

name属性:函数的名称

length属性:函数形参的个数

prototype属性:指向该函数的原型对象

call()方法和apply()方法:是间接调用该函数的方法,第一个参数是调用上下文,就是函数内部this的指向。

bind()方法:将函数绑定到某个对象上

toString()方法:返回字符串,一般是函数的完整源码

函数的调用方式

1、作为函数调用:函数名称(); 函数中的this === window

2、作为对象的方法调用:对象.方法名(); 函数中的this === 对象

3、作为构造器调用:需要配合new操作符,而且函数中不能有显式的return返回对象。函数中的this === 实例

4、使用call或者apply调用:重新指定函数中this的指向,即函数上下文context,使用方式如下。

要调用的函数或方法.apply(context, 参数数组)

要调用的函数或方法.call(context, 参数列表)

总结:以上4种方法都可以调用某个函数(如果函数是某个对象的属性,就称为“方法”),区别就是函数中的this指向不同。函数被调用时,会隐式传递两个参数this和arguments,其中arguments表示传递的实参,它是一个类数组。


你可能感兴趣的:(javascript)