2012-06-11 70 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