JavaScript関数宣言文と関数式


関数宣言文と関数式は、関数を再定義するために使用されます.
関数宣言関数宣言
関数宣言は、関数定義子のみが存在し、個別の割り当てコマンドがないことを示します.したがって、関数名を定義する必要があります.
function a() { }; // 함수명 a = 변수명
a(); // 실행OK
関数式の関数式
関数式は、定義された関数を個別の変数に割り当てるため、関数名を持つことも、関数名を持たないこともできます.したがって、関数名が定義されていない関数式を匿名関数式と呼び、関数名を定義する関数式を記名関数式と呼ぶ.
関数式は通常匿名関数式です.
var b = function () { }; // 변수명 b = 함수명
b(); // 실행OK

var c = function d() { }; // 변수명 c, 함수명 d
c(); // 실행OK
d(); // 에러발생!!
記名関数式の注意点
記名関数式を使う理由はないようです
外部では関数名で関数を呼び出すことはできません.関数名には、関数内部からのみアクセスできます.
過去のシンボル関数式から出力された関数名は良いが、匿名関数式の値がundefinedまたはunnamedであるため、シンボル関数式をデバッグする際にどの関数を追跡したか.ただし、すべてのブラウザが匿名関数式の変数名を関数のname propertyに割り当てているため、このようなことは起こりません.
また、c関数内部では、c()が呼び出されてもd()が呼び出されても正常に動作する.関数名を使用して、関数内で再帰関数を呼び出すことができます.c()を呼ぶだけでもいいので、d()を呼ぶだろうと思います.
関数宣言文と関数式の違い
関数宣言は関数全体をハイライトし、関数式は変数宣言のみをハイライトします.
ここでは、関数式で関数を別の変数に値として割り当てるため、関数も値として扱われていることがわかります.
// === 호이스팅 영역: 실제로 작동되지는 않지만 이해를 돕기 위해 코드로 적었습니다 ===
var sum = function sum (a,b) {
  return a + b;
}
 
var multiply;

// === 아래부터는 실제 코드입니다 ===
console.log(sum(1,2));
console.log(multiply(3,4));

var sum = function sum (a,b) {
  return a + b;
}
var multiply = function (a,b) {
  return a + b;
};
関数として宣言されたsum関数は、関数宣言の前に関数全体を呼び出すと反発するため、変数の宣言のみが関数式で反発され、変数の割り当て部分が元の位置に保持されるため、混乱の原因になる可能性があります.
関数宣言文の混乱例
現在の業界では、開発者Aは100行目にsum関数を宣言し、よく書かれています.しかしある日、互いに入社したBは同じファイルの5000行にsum関数を再宣言し、テストなしに配備した.
グローバル選択がアクティブな場合、グローバル空間に宣言されたすべての関数が呼び出され、同じ変数名に異なる値が割り当てられた場合、その後に割り当てられた値は、以前に割り当てられた値overrideを上書きします.
したがって、コードを実行するときに実際に呼び出される関数は、最後に割り当てられた(=最後に宣言された)関数のみです.
したがって、実際の論理では多くの問題が発生しますが、sum関数にはエラーは発生しません.
これらのsum関数を関数式として定義すると、それらは自分の意図通りによく表現されます.sum関数の100行目を最初に宣言する前にsum関数を呼び出そうとすると、すぐにエラーが発生し、迅速にデバッグできます.
したがって、相対的に関数式の方が安全です.