JavaScript Funksionsdefinition
- Föregående sida JS-objektsreferens
- Nästa sida JS-funktionens parametrar
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; }
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};
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);
上面的函数实际上是一个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);
您实际上无需使用函数构造器。上面的例子这么写也是一样的:
Exempel
var myFunction = function (a, b) {return a * b}; var x = myFunction(4, 3);
大多数情况下,您可以避免在 JavaScript 中使用 new
关键词。
函数提升
在本教程中稍早前,您已经学到了“提升”(hoisting)。
Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。
Hoisting 应用于变量声明和函数声明。
正因如此,JavaScript 函数能够在声明之前被调用:
myFunction(5); function myFunction(y) { return y * y; }
使用表达式定义的函数不会被提升。
自调用函数
函数表达式可以作为“自调用”。
自调用表达式是自动被调用(开始)的,在不进行调用的情况下。
函数表达式会自动执行,假如表达式后面跟着 ()
。
您无法对函数声明进行自调用。
您需要在函数周围添加括号,以指示它是一个函数表达式:
Exempel
(function () { var x = "Hello!!"; // 我会调用我自己 }();
上面的函数实际上是一个匿名的自调用函数(没有名称的函数)。
函数可用作值
JavaScript 函数可被用作值:
Exempel
function myFunction(a, b) { return a * b; } var x = myFunction(4, 3);
JavaScript 函数可用在表达式中:
Exempel
function myFunction(a, b) { return a * b; } var x = myFunction(4, 3) * 2;
函数是对象
JavaScript 中的 typeof
运算符会为函数返回 "function
"。
但是最好是把 JavaScript 函数描述为对象。
JavaScript 函数都有属性和方法。
arguments.length
会返回函数被调用时收到的参数数目:
Exempel
function myFunction(a, b) { return arguments.length; }
toString()
方法以字符串返回函数:
Exempel
function myFunction(a, b) { return a * b; } var txt = myFunction.toString();
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;
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 };
IE11 eller tidigare versioner stöder inte pekarfunktioner.
- Föregående sida JS-objektsreferens
- Nästa sida JS-funktionens parametrar