最近、他の人の JavaScript コードのメンテナンスを始めました。バグを修正し、機能を追加し、コードを整理して一貫性を高めるように努めています。
以前の開発者は関数を宣言する方法を 2 つ使用していましたが、その理由が何かはわかりません。
2つの方法は次のとおりです。
var functionOne = function() {
// Some code
};
そして、
function functionTwo() {
// Some code
}
これら 2 つの異なる方法を使用する理由と、それぞれの長所と短所は何ですか? 一方の方法でできて、もう一方の方法ではできないことはありますか?
ベストアンサー1
違いは、は関数式でfunctionOne
あり、その行に到達したときにのみ定義されるのに対し、は関数宣言であり、周囲の関数またはスクリプトが実行されるとすぐに定義されることです(functionTwo
吊り上げ)。
たとえば、関数式:
// TypeError: functionOne is not a function
functionOne();
var functionOne = function() {
console.log("Hello!");
};
そして、関数宣言:
// Outputs: "Hello!"
functionTwo();
function functionTwo() {
console.log("Hello!");
}
歴史的に、ブロック内で定義された関数宣言は、ブラウザー間で一貫性なく処理されていました。厳密モード(ES5 で導入) 関数宣言のスコープをその囲みブロックに限定することでこの問題を解決しました。
'use strict';
{ // note this block!
function functionThree() {
console.log("Hello!");
}
}
functionThree(); // ReferenceError