JavaScript Funksionsdefinition

JavaScript-funktioner definieras genom function nyckelorddefiniera.

kan du använda funktion声明eller funktionUttryck

funktion.deklaration

I denna kurs lärde du dig tidigare att använda följande syntax声明Funktion:

function funktionsnamn(parametrar) {
   Kod som ska köras
}

De funktioner som deklarerats kommer inte att köras direkt. De 'sparas för senare användning' och kommer att köras senare när de anropas.

Exempel

function myFunction(a, b) {
     return a * b;
}

Prova själv

semikolon används för att separera utökningsbara JavaScript-instruktioner.

Eftersom funktion声明är inte uttryckliga instruktioner och avslutas inte ofta med semikolon.

funktionsexpressioner

JavaScript-funktioner kan också användaUttryckför att definiera.

Funktionsexpressioner kan lagras i variabler:

Exempel

var x = function(a, b) {return a * b};

Prova själv

Efter att ha lagrat funktionsexpressionen i en variabel kan denna variabel användas som en funktion:

Exempel

var x = function(a, b) {return a * b};
var z = x(4, 3);

Prova själv

上面的函数实际上是一个Anonyma funktioner(没有名称的函数)。

Funktioner som lagras i variabler behöver inte ha ett namn. De används alltid genom variabelnamnet.

Den ovanstående funktionen avslutas med ett semikolon eftersom den är en del av ett utökat uttryck.

Function()-konstruktorn

Som du såg i tidigare exempel, definieras JavaScript-funktioner genom function nyckelord definierade.

Funktioner kan också definieras genom att använda Function() 的内建 JavaScript 函数构造器来定义。

Exempel

var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);

Prova själv

您实际上无需使用函数构造器。上面的例子这么写也是一样的:

Exempel

var myFunction = function (a, b) {return a * b};
var x = myFunction(4, 3);

Prova själv

大多数情况下,您可以避免在 JavaScript 中使用 new 关键词。

函数提升

在本教程中稍早前,您已经学到了“提升”(hoisting)。

Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。

Hoisting 应用于变量声明和函数声明。

正因如此,JavaScript 函数能够在声明之前被调用:

myFunction(5);
 function myFunction(y) {
     return y * y;
}

使用表达式定义的函数不会被提升。

自调用函数

函数表达式可以作为“自调用”。

自调用表达式是自动被调用(开始)的,在不进行调用的情况下。

函数表达式会自动执行,假如表达式后面跟着 ()

您无法对函数声明进行自调用。

您需要在函数周围添加括号,以指示它是一个函数表达式:

Exempel

(function () {
    var x = "Hello!!";      // 我会调用我自己
}();

Prova själv

上面的函数实际上是一个匿名的自调用函数(没有名称的函数)。

函数可用作值

JavaScript 函数可被用作值:

Exempel

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3);

Prova själv

JavaScript 函数可用在表达式中:

Exempel

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3) * 2;

Prova själv

函数是对象

JavaScript 中的 typeof 运算符会为函数返回 "function"。

但是最好是把 JavaScript 函数描述为对象。

JavaScript 函数都有属性方法

arguments.length 会返回函数被调用时收到的参数数目:

Exempel

function myFunction(a, b) {
    return arguments.length;
}

Prova själv

toString() 方法以字符串返回函数:

Exempel

function myFunction(a, b) {
    return a * b;
}
var txt = myFunction.toString();

Prova själv

Funktioner som definieras som objektattribut kallas objektmetoder.

Funktioner som är utformade för att skapa nya objekt kallas objektconstructorer (objektconstructorer).

Pekarfunktioner

Pekarfunktioner tillåter användning av kort syntax för att skriva funktionsexpressioner.

Du behöver inte function-nyckelord, return-nyckelord och klamrar.

Exempel

// ES5
var x = function(x, y) {
  return x * y;
}
// ES6
const x = (x, y) => x * y;

Prova själv

Pekarfunktioner har inte sitt egna this. De är inte lämpliga för att definiera objektmetoder.

Pekarfunktioner lyfts inte upp. De måste definieras innan de används.

Användning av const är säkrare än var eftersom funktionsexpressioner alltid är konstanta värden.

Om funktionen är en enda mening, kan return-nyckelordet och klamrar utelämnas. Därför kan det vara en bra vana att behålla dem:

Exempel

const x = (x, y) => { return x * y };

Prova själv

IE11 eller tidigare versioner stöder inte pekarfunktioner.