ES 6 JavaScript関数詳細
45588 ワード
ES 6 JavaScript関数詳細、関数概念 1.1関数文法 1.1.1例 1.2関数式 1.2.1匿名関数 1.2.2名前付き関数式-1 1.2.3名前付き関数式-2 1.2.4名前付き関数式-3(再帰関数) 1.3関数/匿名関数/関数表現の違い 1.4高次関数 1.4.1例カウンタカウント 1.4.2例カウンタカウント 、関数パラメータ .一般パラメータ .可変パラメータ .argmentsオブジェクト .パラメータ解 、関数戻り値 3.1表現の値 1、関数概念
1.1関数文法は、式を用いて関数を定義し、式の関数名は を省略することができる.この関数名が省略されていない場合は、この関数の内部 でのみ使用できます.
1.2.1匿名関数関数と匿名関数は、本質的には同じ関数オブジェクトです.ただし、関数は自分の識別子・関数名を持っています.匿名関数は他の識別子を借りる必要があります. の違いは、関数会宣言の向上であり、関数式は ではないということです.高次関数:関数はパラメータとして、または1つのパラメータ を返します.
1.4.1例-カウンタカウンタカウンター
2.1一般パラメータパラメータは一つの位置を占め、標準パラメータ をサポートします. JSにはPythonのキーワードが含まれていません. JSはパラメータ位置のみの対応をします. JSは、デフォルトパラメータの位置 を制限しない.提案:デフォルトのパラメータは後ろに書いてください.これはいい習慣です. JSでは…可変パラメータ(Python用*で複数のパラメータを収集)を表します. 関数のすべてのパラメータは、オブジェクトのキーのペア に保存されます. ES 6の前に、argmentsは可変パラメータを実現する唯一の である. ES 6が開始された後、推薦しないで、可変パラメータを使用することを提案します.互換性のために を保持します.矢印関数を使用すると、取ったargmentsは私たちが欲しい ではないことに注意してください.とPythonは類似しています.JSはパラメータ解を提供していますが、依然として…記号を使用して構成を解除しています. JS解凍後の値の個数は不要であり、パラメータ個数に対応する . Pythonでは、 である. JSで多値を返したら最後の値 だけ戻ります.種類のCの言語には、一つの概念—表現の値 があります.割当表現の値:等号右の値 カンマ表現の値:クラスC言語は、カンマ表現、カンマ表現の値をサポートします.最後の表現の値です.
1.1関数文法
function ( ){
;
return ;
}
1.1.1例function add(x, y) {
return x + y;
};
console.log(add(1, 2))
Info: Start process ( 6:24:17)
3
Info: End process ( 6:24:17)
1.2関数式1.2.1匿名関数
const add = function(x, y) {
return x + y;
};
console.log(add(3, 6));
Info: Start process ( 6:31:51)
9
Info: End process ( 6:31:51)
1.2.2名前付き関数式-1const sub = function fn(x, y) {
return x - y;
};
console.log(sub(3, 2))
Info: Start process ( 6:34:53)
1
Info: End process ( 6:34:53)
1.2.3名前付き関数式-2const { fn } = require("jquery");
const sub = function fn(x, y) {
return x - y;
};
console.log(fn(3, 2))
,fn
1.2.4名前付きの関数式-3(再帰関数)const sum = function _sum(n) {
if (n === 1) {
return n;
}
return n + _sum(--n); // _sum only uses inside the function
}
console.log(sum(9))
Info: Start process ( 6:39:27)
45
Info: End process ( 6:39:28)
1.3関数/匿名関数/関数式の違いconsole.log(add(3, 5)) // Output is normal
function add(x, y) {
return x + y;
};
console.log(sub(5, 3)) // sub is not defined
const sub = function(x, y) {
return x - y;
};
1.4高次関数1.4.1例-カウンタカウンタカウンター
const counter = function() {
let c = 0;
return function() {
return ++c;
};
};
const c = counter()
console.log(c())
console.log(c())
console.log(c())
console.log(c())
console.log(c())
Info: Start process ( 7:27:43)
1
2
3
4
5
Info: End process ( 7:27:43)
1.4.2例-カウンタカウンタカウンタカウンタカウンタ(ジェネレータバージョン)const counter = ( function * () {
let c = 1;
while (true) {
yield c++
}
})()
console.log(counter.next().value)
console.log(counter.next())
console.log(counter.next().value)
console.log(counter.next())
console.log(counter.next().value)
Info: Start process ( 7:33:22)
1
{ value: 2, done: false }
{ value: 3, done: false }
{ value: 4, done: false }
5
Info: End process ( 7:33:22)
2、関数パラメータ2.1一般パラメータ
const add = (x, y) => x + y
console.log(add(4, 5))
const add2 = (x=6, y) => x + y
console.log(add2()) // NaN add2(undefined, undefined)
console.log(add2(1)) // NaN add2(1. undefined)
console.log(add2(y=3, z=2)) // 5 add2(3, 2)
console.log(add2(y=3)) // NaN add2(3, undefined)
Info: Start process ( 12:53:07)
9
NaN
NaN
5
NaN
Info: End process ( 12:53:07)
2.2可変パラメータ(rest parameters残パラメータ)const sum = function (...args) {
let result = 0;
for (let x in args) {
result += args[x];
console.log(args[x])
};
return result;
};
console.log(sum(1, 2, 3, 4, 5))
Info: Start process ( 1:15:24)
1
2
3
4
5
15
Info: End process ( 1:15:24)
2.3 argmentsオブジェクト(function (p1, ...args) {
console.log(p1);
console.log(args);
console.log('='.repeat(55));
console.log(arguments);
for (let x in arguments) {
console.log(x, arguments[x]);
};
})('abc', 1, 3, 5)
Info: Start process ( 1:25:17)
abc
[ 1, 3, 5 ]
=======================================================
[Arguments] { '0': 'abc', '1': 1, '2': 3, '3': 5 }
0 abc
1 1
2 3
3 5
Info: End process ( 1:25:17)
((x, ...args) => {
console.log(args); //
console.log(x);
// console.log(arguments); //
})(...[1, 2, 3]);
Info: Start process ( 1:28:41)
[ 2, 3 ]
1
Info: End process ( 1:28:41)
2.4パラメータ解凍const add = (x, y) => {console.log(x, y); return(x + y)};
console.log(add(...[100, 200]))
console.log(add(...[100, 1, 2, 3]))
console.log(add(...[555]))
Info: Start process ( 1:32:10)
100 200
300
100 1
101
555 undefined
NaN
Info: End process ( 1:32:10)
3、関数の戻り値return 1, 2
を使用して多値に戻すことができ、本質的には一つの値であり、一つの元const add = (x, y) => {return x, y};
const add2 = (x, y, z) => {return x, y, z};
console.log("add:", add(1, 2))
console.log("add2:", add2(1, 2, 3))
Info: Start process ( 1:38:28)
add: 2
add2: 3
Info: End process ( 1:38:28)
3.1表式の値a = (x = 5, y = 6, true)
console.log(a)
b = (123, true, z = 'test');
console.log(b)
function c() {
return x = 5, y = 6, true, 'ok'
};
console.log(c())
console.log((1, 2, 3))
Info: Start process ( 1:53:44)
true
test
ok
3
Info: End process ( 1:53:44)