TIL 018|JavaScript関数
23721 ワード
私たちはたくさんのプログラムを使います.番組には各機能を担当するものもあります.関数です.100回と1000回の同じタスクを避けるのに役立つ感謝関数を整理しましょう.
Function
functions are treated like any other variable can be assigned as a value to variable can be passed as an argument to other functions. can be returned by another function 上記の例に示すように、関数式は変数に割り当てられ、他の関数のパラメータとして使用されてもよいし、他の関数の
再帰関数とは、関数が自分の状況を再参照することを意味します.
これは私の大好きな矢印関数です.矢印関数は常に匿名関数を使用しており、
参考資料:
エリー
Function
関数(Function)はプログラムの最も基本的な要素であり,複数回使用可能なサブプログラムといえる.主に入力を受け入れて計算したり、特定の動作を実行したりする役割を果たします.
Function declaration
// 기본 선언 방법
function doSomething(parameter1, parameter2) {
body ...
return;
}
関数を宣言するときは、関数名を動詞やコマンドで記述し、一度に複数の操作を行わないように注意してください.1つの関数に1つの動作をさせます.// 함수 호출 방법
doSomething(parameter1, parameter2);
関数を呼び出すには、関数名に()
を付けることができます.この場合、()
スキームに必要なパラメータを加えることができる.パラメータがなくても、()
は関数名の横にくっつく必要があります.// 간단한 예시
function log(message) {
console.log(message);
}
log("Hello@"); // Hello@
Parameters
パラメータを使用するときに注意が必要です.パラメータを渡す場合、value
を直接渡す場合と、reference
を渡す場合があるからである.違いを覚えたほうがいいです.function changeName(obj) {
obj.name = "coder";
}
const cheoljin = { name: "cheoljin" };
changeName(cheoljin);
console.log(cheoljin); // {name: "coder"}
上の状況を見てください.cheoljin
の場合、const
で値を変更できないと宣言されていることがわかります.ただし、changeName(cheoljin)
を運転すると、名称はcoder
に変更される.const
と宣言されたcheoljin
変数のうち、{name: "cheoljin"}
というobject
の値は直接割り当てられたものではなく、reference
の値が割り当てられたものである.つまり、reference
は変更できませんが、reference
が到着したメモリの内容は変更できます.したがって、const
を使用しても内容が変化する可能性がある.object
の詳細については、後ほど整理します.
もし、上記の場合、cheoljin
の割当値が"cheoljin"
だったら、どうなりますか?function changeName(obj) {
obj = "coder";
}
const jini = "cheoljin";
changeName(jini);
console.log(jini); // cheoljin
値段は変わらない.const
と宣言されたvalue
は変更できないからです.
Default parameter// 매개변수를 입력하지 않은 경우에 출력될 값을 미리 정할 수 있음.
function showMessage(message, from = "unknown") {
console.log(`${message} by ${from}`);
}
showMessage("Hi"); // Hi by unknown
Rest parameter// 정해지지 않은 수의 인자를 배열로 받을 수 있음.
function printAll(...args) {
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
}
printAll("dream", "coding", "ellie");
Local scope
関数(block)内で宣言された変数には、関数内でのみアクセスできます.let globalMessage = "global"; // global variable
function printMessage() {
let message = "hello";
console.log(message); // local variable
console.log(globalMessage);
// return undefined <- skip!
}
printMessage();
console.log(message);
上で関数printMessage()
を実行している場合、console.log(message)
の場合、領域変数message
は同じ関数内で近似しているため、出力は正常です.また、console.log(globalMessage)
の場合、グローバル変数globalMessage
に近いため、出力は正常である.
ただし、最後のconsole.log(message)
ではblock
しかないため、地域変数message
にアクセスできないため、エラーメッセージが出力される.
Return
関数を使用する場合は、return
を使用できます.console.log()
の場合、コンソールウィンドウでのみ出力できます.実際の戻り値はreturn
を使用する必要があります.return
のない関数であれば、return undefined
は省略されていることを覚えておいてください.
Early return, early exit!
return
をすばやく覚え、exit
をすばやく覚えます.// bad example
function upgradeUser(user) {
if (user.point > 10) {
// 길고 긴 로직들...
}
}
上記のように,記述コードの可読性は劣る.条件を満たさない場合に論理を構成する必要はない.// good example
function upgradeUser(user) {
if (user.point <= 10) {
return;
}
// 본격적으로 실행하고 싶은 로직들...
}
上記のように、適用されない条件では、return
を介して速やかに終了し、実際に適用される値に対して論理を記述することができる.その結果、同じ動作を実行しても可読性の観点から以下が有利である.
Function expression
関数は基本的にstatement
と宣言できますが、式として表すこともできます.
関数宣言と式の違いは、生成された時点です.関数宣言については、アップグレードにより、JavaScript
の動作がその位置に到達したときに関数式が生成される.
💡 First-class function!
// 기본 선언 방법
function doSomething(parameter1, parameter2) {
body ...
return;
}
// 함수 호출 방법
doSomething(parameter1, parameter2);
// 간단한 예시
function log(message) {
console.log(message);
}
log("Hello@"); // Hello@
function changeName(obj) {
obj.name = "coder";
}
const cheoljin = { name: "cheoljin" };
changeName(cheoljin);
console.log(cheoljin); // {name: "coder"}
function changeName(obj) {
obj = "coder";
}
const jini = "cheoljin";
changeName(jini);
console.log(jini); // cheoljin
// 매개변수를 입력하지 않은 경우에 출력될 값을 미리 정할 수 있음.
function showMessage(message, from = "unknown") {
console.log(`${message} by ${from}`);
}
showMessage("Hi"); // Hi by unknown
// 정해지지 않은 수의 인자를 배열로 받을 수 있음.
function printAll(...args) {
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
}
printAll("dream", "coding", "ellie");
let globalMessage = "global"; // global variable
function printMessage() {
let message = "hello";
console.log(message); // local variable
console.log(globalMessage);
// return undefined <- skip!
}
printMessage();
console.log(message);
// bad example
function upgradeUser(user) {
if (user.point > 10) {
// 길고 긴 로직들...
}
}
// good example
function upgradeUser(user) {
if (user.point <= 10) {
return;
}
// 본격적으로 실행하고 싶은 로직들...
}
return
であってもよい.一級関数、一級オブジェクトに疑問がある場合は、対応するMDNをよく読んでください.const print = function () {
// anonymous function
console.log("print");
};
print();
print
という変数に匿名関数が割り当てられています.通常、関数式を使用する場合は匿名関数が使用されます.このとき、変数print
は、匿名関数のデータを直接入力するのではなく、reference
を割り当てる.const printAgain = print;
printAgain();
printAgain
という変数にprint
を割り当てると、同じ結果値を実行する関数として、同じ匿名関数のreference
を割り当てることができる.Callback function
function randomQuiz(answer, printYes, printNo) {
if (answer === "love you") {
printYes();
} else {
printNo();
}
}
// anonymous function
const printYes = function () {
console.log("yes");
};
// named function
// better debugging in debugger's stack traces
// recursions
const printNo = function print() {
console.log("no!");
};
randomQuiz("wrong", printYes, printNo);
randomQuiz("love you", printYes, printNo);
関数式を使用すると、上記のように関数のパラメータとして関数を受信できます.上記の関数式では、匿名関数ではなく関数名を個別に記入する場合があります.これは、デバッグ時に関数名を記録しやすくし、再帰関数を使用する必要がある場合に使用します.再帰関数とは、関数が自分の状況を再参照することを意味します.
return
を適切に設定して、callスタックがいっぱいになっていることを確認してください.Arrow function(ES6 ~ )
これは私の大好きな矢印関数です.矢印関数は常に匿名関数を使用しており、
function
などのキーワードを書く必要がないので便利です.// 이렇게 생겼던 코드가
const simplePrint = function() {
console.log("simplePrint");
};
// 이렇게 간단하게 바뀐다.
const simplePrint = () => console.log("simplePrint");
単純な例
// Fun quiz time❤️
// function calculate(command, a, b)
// command: ( add, substract, divide, multiply, remainder)
function calculate(command, a, b) {
switch (command) {
case "add":
return a + b;
break;
case "substract":
return a - b;
break;
case "divide":
return a / b;
break;
case "multiply":
return a * b;
break;
case "remainder":
return a % b;
break;
default:
return "invalid command";
}
}
console.log(calculate("add", 3, 2));
command
をパラメータとして,簡単な計算が可能な関数を作成した.参考資料:
エリー
Reference
この問題について(TIL 018|JavaScript関数), 我々は、より多くの情報をここで見つけました https://velog.io/@jun_n3/TIL-018-JavaScript-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol