JavaScrpit 基础系列之函数(十)

305 阅读1分钟

函数

一个函数是可以通过外部代码调用的一个“子程序”(或在递归的情况下由内部函数调用)。一个函数由称为函数体的一系列语句组成。值可以传递给一个函数,函数将返回一个值。

函数是头等对象,也可以像对象一样具有属性和方法,与对象的区别在于函数可以被调用。

函数定义

函数声明

语法: function name(params) {statements}

// function name (params) {statements}
f1(1)
function f1(params) {
    console.log(params)
}
f1(2)
// 1
// 2

函数声明会使函数提升,可以在函数声明前调用该函数。

函数表达式

语法: var fun = function name(params) {statements} 也可以是一个匿名函数。

f2(1) // f2 is not a function

var f2 = function(params) {
    console.log(params)
}

f2(2) // 2

函数表达式没有提升, 只能在定义后调用。

函数生成器表达式

语法: function name(params) {statements}

function关键字后跟一个星号会定义一个生成器函数。它返回一个 Generator 对象。

function* f3(i) {
  yield i;
  yield i + 10;
}

const f = f3(10);

console.log(f.next().value) // 10
console.log(f.next().value) // 20

生成器函数在执行时能暂停,后面又能从暂停处继续执行。 不能当构造函数使用。

箭头函数表达式

语法: (params) => {statements}

var f4 = (params) => {
    console.log(params)
    console.log(this)
}
f4(1)

特点:

  • 没有单独的 this
  • 不绑定 arguments
  • 箭头函数不能用作构造器,不能使用 new
  • 箭头函数没有prototype属性。
  • 箭头函数不能用作函数生成器
Function`构造函数

语法:new Function (arg1, arg2, ... argN, functionBody)