JavaScript-funktion määrittely

kurssin suositukset: function JavaScript-funktiot määritelläänAvainsanamäärittää.

voit käyttää funktiota声明tai funktioIlmaisu

funktioilmoitus

Tässä kurssissa oppisimme aikaisemmin seuraavalla syntaxilla声明Funktio:

function nimi(parametrit) {
   Suoritettavaa koodia
}

Määritetyt funktiot eivät suoriteta suoraan. Ne 'tallennetaan myöhempää käyttöä varten' ja suoritetaan myöhemmin, kun ne kutsutaan.

Esimerkki

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

Kokeile itse

Semikololla erotetaan suoritettavia JavaScript-lauseita.

Koska funktio声明Eivät ole suoritettavia lauseita, eivätkä päättymisiä semikololla ole yleisiä.

funktiokuvauksia

JavaScript-funktiot voivat myös käyttääIlmaisumäärittää.

Funktiokuvaukset voidaan tallentaa muuttujiin:

Esimerkki

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

Kokeile itse

Funktiokuvauksen tallentamisen jälkeen muuttuja voidaan käyttää funktiona:

Esimerkki

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

Kokeile itse

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

Muuttujassa tallennetut funktiot eivät tarvitse nimeltä. Ne kutsutaan aina muuttujanimellä.

Yllä oleva funktio päättyy semikololla, koska se on suoritettavan lauseen osa.

Function()-rakentajalla

Kuten näitte aikaisemmassa esimerkissä, JavaScript-funktiot määritellään function avainsanalla määritettyjä.

Funktiot voivat myös olla nimeltä Function() 的内建 JavaScript 函数构造器来定义。

Esimerkki

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

Kokeile itse

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

Esimerkki

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

Kokeile itse

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

函数提升

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

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

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

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

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

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

自调用函数

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

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

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

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

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

Esimerkki

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

Kokeile itse

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

函数可用作值

JavaScript 函数可被用作值:

Esimerkki

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

Kokeile itse

JavaScript 函数可用在表达式中:

Esimerkki

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

Kokeile itse

函数是对象

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

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

JavaScript 函数都有属性方法

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

Esimerkki

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

Kokeile itse

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

Esimerkki

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

Kokeile itse

Funktiot, jotka on määritelty objektin ominaisuuksiksi, kutsutaan objektimenetelmiksi.

Funktiot, jotka on suunniteltu luomaan uusia objekteja, kutsutaan objektin rakentajafunktioiksi (objektin rakentajiksi).

Nuolifunktiot

Nuolifunktiot mahdollistavat lyhyen syntaksin käyttöä funktioilmaisuihin.

Funktiokoodi, return-koodi ja sulkeet eivät ole tarpeen.

Esimerkki

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

Kokeile itse

Nuolifunktiot eivät omaa this-muuttujaa. Ne eivät sovellu objektimenetelmien määrittämiseen.

Nuolifunktiot eivät ole määritelty. Ne on määriteltävä ennen käyttöä.

const käytetään variaation sijaan, koska funktioilmaisu on aina vakioarvo.

Jos funktio on yksittäinen lause, voi return-koodi ja sulkeet jättää pois. Siksi niiden säilyttäminen voi olla hyvä tapa:

Esimerkki

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

Kokeile itse

IE11 tai aikaisemmat versiot eivät tue nuolifunktioita.