12関数
41757 ワード
で行ないます。
一連の入出力を定義するプロセス
定義関数(関数定義)による関数の作成
パラメータ
関数の呼び出し
関数を呼び出すと、コードブロックの文はバッチ実行->戻り値を返します.
// 함수의 호출
const result = add(2, 5);
console.log(result); // 7
関数を使用する理由
メンテナンスが容易な
関数
関数ライブラリはfunctionキーワード、関数名、パラメータリスト、および関数ボディから構成されます.
関数はオブジェクトですが、通常のオブジェクトとは異なります.
通常のオブジェクトは呼び出せませんが、関数は呼び出せます.
関数名
パラメータリスト
かんすうたい
関数の定義
1.関数宣言
function add(x, y) {
return x + y;
}
// 함수 참조
console.log(add); // f add(x, y)
// 함수 호출
console.log(add(2,5)); // 7
// 함수 선언문은 함수 이름을 생략할 수 없음
// 함수 선언문은 표현식이 아님
function (x, y) {
return x + y; // SyntaxError
}
2.関数式
// 기명 함수 표현식
const add = function foo(x, y) {
return x + y;
}
console.log(add(2,5)); // 7
// 함수 이름으로 호출하면 ReferenceError 발생
console.log(foo(2,5)); // ReferenceError : foo is not defined
3.関数の作成点と関数のエスケープ
//함수 참조
console.dir(add); // f add(x, y)
console.dir(sub); // undefined
// 함수호출
console.log(add(2, 5)); // 7
console.log(sub(2, 5)); // TypeError : sub is not a function
// 함수 선언문
function add(x, y) {
return x + y;
}
// 함수 표현식
const sub = function (x, y) {
return x - y;
}
-関数宣言によって定義された関数と関数式によって定義された関数を作成する時間は、
関数エスケープ(function hilling):JavaScriptの固有の特徴は、関数宣言の動作がコードの前にあるようにすることです.
4.Functionコンストラクタ
const add1 = (function () {
var a = 10;
return function (x, y) {
return x + y + a;
};
}());
console.log(add1(1, 2)); // 13
// Function 생성자 함수로 생성한 함수는 클로저를 생성하지 않는 등,
// 함수 선언문이나 함수 표현식으로 생성한 함수와 다르게 동작
const add2 = (function () {
var a = 10;
return new Function('x', 'y', 'return x + y + a;');
}());
console.log(add2(1, 2)); // ReferenceError : a is not defined
5.矢印関数
const add = (x, y) => x + y;
console.log(add(2, 5)); // 7
関数呼び出し
1.パラメータとパラメータ
function add(x, y) {
return x + y;
}
//매개변수보다 인수가 더 많은 경우 초과된 인수 무시
console.log(add(2, 5, 10)); // 7
// 인수가 전달되지 않는 경우 단축 평가를 사용하여 기본값 할당
function add(a, b, c) {
a = a || 0;
b = b || 0;
c = c || 0;
return a + b + c;
}
console.log(add(1, 2, 3)); // 6
console.log(add(1, 2)); // 3
console.log(add()); // 0
2.パラメータの最大数
3.戻り文
// ex1)
function multiply(x, y) {
return x * y; // 반환문
// 반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시
console.log('실행되지 않음');
}
const result = multiply(3, 5);
console.log(result); // 15
// ex2)
function foo () {
return;
}
console.log(foo()); // undefined
// ex3)
function multiply2(x, y) {
// return 키워드와 반환값 사이에 줄바꿈이 있으면
return // 세미콜론 자동 삽입 기능(ASI)에 의해 세미콜론 추가
x * y; // 무시
}
console.log(multiply2(3,5)); // undefined
参照による外部ステータスの転送と変更
// 매개변수 primitive는 원시 값을 전달받고, 매개변수 obj는 객체를 전달받음
function changeVal(primitvie, obj) {
primitive += 100;
obj.name = 'Kim';
}
// 외부
var num = 100;
var person = { name: 'Lee' };
console.log(num); // 100
console.log(person); // { name: "Lee" }
// 원시 값은 값 자체가 복사되어 전달, 객체는 참조 값이 복사되어 전달
changeVal(num, person);
// 원시 값은 원본이 훼손되지 않음
console.log(num); // 100
// 객체는 원본이 훼손
console.log(person); // { name: "Kim" }
転送
たじゅうかんすう
1.即時実行関数
->即時実行関数は1回のみ呼び出され、
(function () {
var a = 3;
var b = 5;
return a * b;
}());
// 즉시 실행 함수는 반드시 그룹 연산자(...) 감싸야 함
function foo() {
}(); // SyntaxError
// 함수 코드 블록의 닫는 중괄호 뒤에 ";"이 암묵적으로 추가되어 오류 발생
// => function foo() {};();
// 즉시 실행 함수도 일반 함수처럼 값을 반환 가능
var res = (function () {
var a = 3;
var b = 5;
return a * b;
}());
console.log(res); // 15
// 즉시 실행 함수에도 일반 함수처럼 인수를 전달할 수 있음
res = (function (a, b) {
return a * b;
}(3, 5));
console.log(res); //15
さいきかんすう
->条件がない場合は、関数が無限に呼び出され、スタックオーバーフロー障害
function countdown(n) {
for (var i = n; i >= 0; i--) console.log(i);
}
countdown(10);
// 재귀 함수로 변경
function countdown(n) {
if (n < 0) return;
console.log(n);
countdown(n - 1); // 재귀 호출
}
countdown(10);
重ね合わせ関数
function outer() {
var x = 1;
// 중첩함수
function inner() {
var y = 2;
// 외부 함수의 변수 참조 가능
console.log(x + y); // 3
}
inner();
}
outer();
コールバック関数
// ex1)
// 익명 함수 리터럴을 콜백 함수로 고차 함수에 전달
// 익명 함수 리터럴은 repeat 함수를 호출할 때마다 평가되어 함수 객체를 생성
repeat(5 , function (i) {
if (i % 2) console.log(i);
}); // 1 3
// ex2)
const logOdds = function (i) {
if (i % 2) console.log(i);
};
// 고차 함수에 함수 참조를 전달
repeat(5, logOdds); // 1 3
// 콜백 함수를 사용하는 고차 함수 map
var res = [1,2,3].map(item => item * 2);
console.log(res); // [2, 4, 6]
// 콜백 함수를 사용하는 고차 함수 filter
res = [1,2,3].filter(item => item % 2);
console.log(res); // [1, 3]
// 콜백 함수를 사용하는 고차 함수 reduce
res = [1, 2, 3].reduce((acc, cur) => acc + cur),0);
console.log(res); // 6
純関数と非純関数
純関数(prue function):効果を付与していない関数
var count = 0;
// 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환
function increase(n) {
return ++n;
}
count = increase(count);
console.log(count); // 1;
count = increase(count);
console.log(count); // 2;
非純関数(不純関数):付与効果のある関数var count = 0;
function increase() {
return ++count; // 외부 상태에 의존하여 외부 상태를 변경
}
increase();
console.log(count); // 1;
increase();
console.log(count); // 2;
📖 参考図書:モダンJavaScript Deep Dive JavaScriptの基本概念と動作原理Reference
この問題について(12関数), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_jazziron/12テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol