2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
toiminto
Jokainen funktio on funktiotyypin esiintymä, ja funktiolla on myös ominaisuuksia ja menetelmiä, kuten muillakin viitetyypeillä. Funktiot ovat objekteja, ja funktion nimi on osoitin funktioobjektiin, eikä se välttämättä ole tiukasti sidottu itse funktioon.
Funktiomäärittelyn funktion deklaratiivinen määritelmä
function sum (n1,n2){ return n1+n2; }Funktiomäärittelyn funktiolauseke
let sum = function(n1,n2){ return n1+n2; };funktion määritelmä nuolifunktio
let sum = (n1,n2)=>{ return n1+n2; };funktion määrittelykonstruktori
let sum = new Function("n1","n2","return n1+n2"); /*这个构造函数接收任意多个字符串参数, 最后一个参数始终会被当成函数体, 而之前的参数都是新函数的参数*/
nuolitoiminto
Nuolifunktioita voidaan käyttää kaikkialla, missä funktiolauseketta voidaan käyttää.
let sum = (a,b)=>{ return a+b; }; let sum1 = function(a,b){ return a+b; }; //箭头函数适合嵌入函数的场景 let arr = [1,2,3]; console.log(arr.map(function(i) {return i+1;})); console.log(arr.map((i)=>{return i+1;})); //二者结果一样,但是箭头函数更为简洁 //如果只有一个参数,括号可以不用。只有没有参数,或者多个参数的情况下,才使用括号 let double = (x)=>{return 2*x;}; let triple = x => {return 3*x}; //箭头函数也可以不使用大括号,但这样会改变函数的行为。使用大括号就说明包含函数体,可以在一 //个函数中包含多条语句,跟常规函数一样。如果不使用,后面只能有一行代码。 let double = (x)=>{return 2*x;}; let triple = x=>3*x;Vaikka nuolifunktioilla on yksinkertainen syntaksi, on monia tilanteita, joissa ne eivät sovellu. Nuolifunktiot eivät voi käyttää argumentteja, super, new.target, eivätkä niitä voi käyttää rakentajina. Lisäksi nuolifunktioilla ei ole prototyyppimääritettä.
Parametrit nuolifunktioissa
Funktio määritellään nuolisyntaksilla, joten funktiolle välitettyihin parametreihin ei pääse käsiksi argumenttiavainsanalla, vaan niihin pääsee vain määritettyjen nimettyjen parametrien kautta.
function foo() { console.log(arguments[0]); } foo(5); // 5 let bar = () => { console.log(arguments[0]); }; bar(5); // ReferenceError: arguments is not defined
Toiminnon nimi
Funktiolla voi olla useita nimiä.
function sum(num1, num2) { return num1 + num2; } console.log(sum(10, 10)); // 20 let anotherSum = sum; console.log(anotherSum(10, 10)); // 20 sum = null; console.log(anotherSum(10, 10)); // 20
Parametrin oletusarvo
Voit määrittää parametrille oletusarvon käyttämällä funktiomäärittelyssä parametrin jälkeen =.
function makeKing(name = 'Henry') { return `King ${name} VIII`; } console.log(makeKing('Louis')); // 'King Louis VIII' console.log(makeKing()); // 'King Henry VIII'Parametrien oletusarvot eivät rajoitu primitiiviarvoihin tai objektityyppeihin, vaan myös kutsufunktion palauttamia arvoja voidaan käyttää
let romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI']; let ordinality = 0; function getNumerals() { // 每次调用后递增 return romanNumerals[ordinality++]; } function makeKing(name = 'Henry', numerals = getNumerals()) { return `King ${name} ${numerals}`; } console.log(makeKing()); // 'King Henry I' console.log(makeKing('Louis', 'XVI')); // 'King Louis XVI' console.log(makeKing()); // 'King Henry II' console.log(makeKing()); // 'King Henry III'
Parametrien laajentaminen ja kerääminen
ES6 lisää uuden laajennusoperaattorin, jolla voidaan käsitellä ja yhdistää keräystietoja erittäin ytimekkäästi. Hajautusoperaattorille hyödyllisin skenaario on funktiomääritelmän parametriluettelo, jossa se voi hyödyntää kielen heikkoja kirjoituksia ja muuttuvan pituisia parametreja. Hajaoperaattoria voidaan käyttää parametrien välittämiseen funktiota kutsuttaessa tai funktion parametrien määrittämiseen.
Laajennetut parametrit
let values = [1, 2, 3, 4]; function getSum() { let sum = 0; for (let i = 0; i < arguments.length; ++i) { sum += arguments[i]; } return sum; } //不使用扩展操作符实现累加 console.log(getSum.apply(null,values)); //使用扩展操作符 console.log(getSum(...values));Kerää parametreja
Jos kerättyjen parametrien edessä on nimetyt parametrit, vain loput parametrit kerätään, jos ei, saadaan tyhjä taulukko. Koska parametrien keräämisen tulos on muuttuva, sitä voidaan käyttää vain viimeisenä parametrina.
function getProduct(...values,lastValue){}//不可以 function ignoreFirst(firstValue,...values){console.log(values)}//可以 ignoreFirst(); // [] ignoreFirst(1); // [] ignoreFirst(1,2); // [2] ignoreFirst(1,2,3); // [2, 3]
Funktioilmoitus ja funktiolauseke
Ennen kuin mitään koodia suoritetaan, JavaScript-moottori lukee funktion määrityksen ja luo funktion määritelmän suorituskontekstissa. Funktiolausekkeen on odotettava, kunnes koodi suoritetaan rivilleen, ennen kuin funktion määritelmä luodaan suorituskontekstissa.
// 没问题 console.log(sum(10, 10)); function sum(num1, num2) { return num1 + num2; } /*函数声明提升*/ // 会出错 console.log(sum(10, 10)); let sum = function(num1, num2) { return num1 + num2; };