2017-02-25 19 views
1

私はこのように見えるJavaScriptを見てきました:匿名機能には囲み括弧が必要ですか?

function() { 
    // do something 
}() 

と最近、このような何か:

(function() { 
    // do something 
})() 

何か違いはありますか?どちらもすぐに正しく実行されますか?

編集:
最初の例についての注意。関数が別のアプリケーションからブラウザに渡されているので、私の最後からエラーはありませんでした。ブラウザで実行するとエラーが発生します。掘り下げた後、アプリケーションAPIが関数をevalに渡していることがわかりました。上記の両方の例が私のために働くので、私はこの質問をしました。

+3

をスローしていました。 – JJJ

+0

あなたのサンプルで誰も呼び出されていないので、実行されていません。あなたはより多くのコンテキストコードを提供する必要があります、あなたはあいまいです。また、この質問は何度も尋ねられ、ここで答えられました。少しの研究をしてください。 – Tomalak

+1

'関数fn(){}()'はJSの構文が間違っています。直ちに関数を実行するには、IIFE '(function(){})()'を使うか、関数式 – Rajesh

答えて

3

両方の機能はすぐに実行されません。直ちに呼び出される関数式の末尾に括弧が付きますも同様です。このように:

(function() { 
 
    console.log("not hello"); 
 
}); 
 

 
(function() { 
 
    console.log("hello"); 
 
})(); 
 
//^^

機能を囲む括弧は関数自体を返す式にそれを回します。次に、返された値(関数である)を()で呼び出します。 IIFEを見てください。

編集:あなたの編集後、最初の関数は、ちょうどそれらのどちらもがすぐに実行されているSyntaxError: Unexpected token (

関連する問題