2012-06-11 72 views
1
1. $(function() { 
     function foo() { return true; } 
     log(bar());      // getting error 
     var bar = function() { return true; }; 
    }); 

2. $(function() { 
     function foo() { return true; } 
     var bar = function() { return true; }; 
     log(bar());      // Working 
    }); 

我這裏的困惑是下面兩個聲明和哪個是有用的區別是什麼?下面的語法有什麼區別?

var bar = function() { return true; }; 

function bar(){ return true; }; 
+0

您在第一個示例中調用'bar()'後纔可用。 –

回答

4

的:

function bar(){ return true; }; 

function declaration這是由翻譯提升到頂部,你可以從任何地方打電話,而:

var bar = function() { return true; }; 

function expression你可以調用只有它是def獨立非執行董事。這不會是之前或向上在代碼中,就像你正在做的:

log(bar());      // getting error 
var bar = function() { return true; }; 

獲取錯誤,因爲在第一線bar但不可用。要解決這個問題,如果需要,可以使用function declaration


要了解更多關於function declarationfunction expression之間的區別,我強烈建議您Kangax閱讀這篇大文章:

+0

不知何故,我們得努力工作。 –

+0

謝謝,清除了困惑.. – user1448287

+1

*在匿名命名的功能的大門口,黑衣男子站了一步,將他的foo bar petard推入戰場。但他太早了!而且這個功能,沒有名字,但是在他殘酷的殘酷嘲弄中,把他的請求吊起來了。* –

0

Sarfraz得到了很好的解釋已經。我只是想增加更多的,第一個功能,

var bar = function(){ return true; }; 

更加靈活,你可以把它聲明後添加一些屬性或方法:

bar.anotherMethod = function() { alert("This is another method"); } 
bar.anotherProperty = 'some value'; 

雖然function bar(){ return true; }不能做到這一點的是辦法。 `

+0

兩者都可以做到這一點,例如兩者都可以有屬性:) – Sarfraz

+0

哦!真?所以我可以調用'bar.anyMethode = function(){...}'作爲函數bar(){return true; }'? –

+0

如果你將'anyMethode'屬性應用到'function bar(){return true; }'。 – Sarfraz