函数


持续更新……

函数

描述

函数就是将一些功能或语句进行封装,在需要的时候进行调用。在 JavaScript中,每个函数其实都是一个Function对象。因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于函数可以被调用。

在使用typeof检查一个函数时,会返回function

作用

简化编程,高内聚、低耦合

返回值

如果一个函数中没有使用return语句,则它默认返回undefined。要想返回一个特定的值,则函数必须使用 return 语句来指定一个要返回的值。

使用new关键字调用一个构造函数除外

实参和形参(值传递和引用传递)

调用函数时,传递给函数的值被称为函数的实参(值传递),对应位置的函数参数名叫作形参。如果实参是一个包含原始值(数字,字符串,布尔值)的变量,则就算函数在内部改变了对应形参的值,返回后,该实参变量的值也不会改变。如果实参是一个对象引用,则对应形参会和该实参指向同一个对象。假如函数在内部改变了对应形参的值,返回后,实参指向的对象的值也会改变:

/* 定义函数 myFunc */
 function myFunc(theObject)
 {
   //实参 mycar 和形参 theObject 指向同一个对象.
   theObject.brand = "Toyota";
 }

 /*
  * 定义变量 mycar;
  * 创建并初始化一个对象;
  * 将对象的引用赋值给变量 mycar
  */
 var mycar = {
   brand: "Honda",
   model: "Accord",
   year: 1998
 };

 /* 弹出 'Honda' */
 window.alert(mycar.brand);

 /* 将对象引用传给函数 */
 myFunc(mycar);

 /*
  * 弹出 'Toyota',对象的属性已被修改.
  */
 console.log(mycar.brand);

函数定义

1、函数声明(命名函数)

利用函数关键字function自定义函数,name为函数名,param为传递给函数的参数名称。语法如下:

// 语法
function name([param[, param[, ... param]]]) { statements }

// 示例
function add(a, b) {
  return a + b;
}

2、函数表达式

同函数声明类似,可以定义函数“名字”(例如可以在调用堆栈时使用)或者使用“匿名”函数。函数表达式不会提升,所以不能在定义之前调用。语法如下:

// 语法 name为函数名可以省略,如果函数名省略,该函数就变为匿名函数
var myFunction = function name([param[, param[, ... param]]]) { statements }
var myFunction = function([param[, param[, ... param]]]) { statements }

// 示例
var myFunction = function() {
    console.log('hello');
}
var myFunction = function namedFunction() {
    console.log('hello');
}

当函数只使用一次时,通常使用IIFE (\Immediately Invokable Function Expressions)。

(function() {
    // statements
})();

IIFE是在函数声明后立即调用的函数表达式。

3、构造函数

所有其他对象, Function 对象可以用new操作符创建:

// 语法 arg1,arg2...表示参数名称,functionBody是一个构成的函数定义的,包含JavaScript声明语句的字符串。
new Function (arg1, arg2, ... argN, functionBody)

// 示例
var fn = new Function('a', 'b', 'console.log("hello");  console.log(a + b);');

fn(1, 2); // 调用函数

注意: 不推荐使用 Function 构造函数创建函数,因为它需要的函数体作为字符串可能会阻止一些JS引擎优化,也会引起其他问题。

4、箭头函数表达式(=>)

箭头函数表达式有着更短的语法,param是参数名称,零参数需要用()表示,只有一个参数时不需要括号(例如 foo => 1)

// 语法 
([param] [, param]) => { statements } param => expression

// 示例
(a, b) => {return a + b};
const materials = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];
console.log(materials.map(material => material.length));
// output: Array [8, 6, 7, 9]

原型链

继承


评论
评论
  目录