重複の可能性:
JavaScript: var functionName = function() {} vs function functionName() {}
これら2つの機能の違いは何ですか
function a()
{
b=2;
alert(b);
}
a();
そしてこの機能
var a=function()
{
b=2
alert(b);
}
a();
主な違いは何ですか
重複の可能性:
JavaScript: var functionName = function() {} vs function functionName() {}
これら2つの機能の違いは何ですか
function a()
{
b=2;
alert(b);
}
a();
そしてこの機能
var a=function()
{
b=2
alert(b);
}
a();
主な違いは何ですか
主な違いは、関数を宣言するときです。
function a(){
// something...
}
宣言されているコード内の場所の前でも、同じスコープでアクセスできるようになります。
ただし、匿名関数を変数に割り当てると、次のようになります。
var a = function(){
// something...
};
割り当て前は利用できません。
これは、関数が実際に作成されたときの結果です。最初のケースでは、コードがコンパイルされたときに作成され、2番目のケースでは、インタプリタが割り当ての行に到達したときに関数が作成されます。
次のコード( jsfiddle)を実行すると、上記の違いを確認できます。
try {
a();
} catch(e) {
alert('problem calling function a(): ' + e);
};
try {
b();
} catch(e) {
alert('problem calling function b(): ' + e);
};
function a(){
alert('function a() called');
};
var b = function(){
alert('function b() called');
};
(前述のjsfiddleのように)そのa()
関数は実際の宣言の前でも適切に呼び出されますがb()
、割り当ての前には使用できません。
唯一の本当の違いは、2番目の関数には名前がなく、function a() {}
1つが持ち上げられていることです。
違いは、関数a()がスクリプトブロックの解析時に定義されるのに対し、var a = function()は実行時に定義されることです。
<script type="text/javascript">
// No errors occured;
function a();
function a(){
console.log("Success");
}
</script>
<script type="text/javascript">
// An error will occured;
a();
var a = function (){
console.log("Success");
}
</script>