以下语法有什么区别?

时间:2012-06-11 06:42:18

标签: javascript

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; };

2 个答案:

答案 0 :(得分:4)

在:

function bar(){ return true; };

function declaration,由翻译提升到顶部,你可以从任何地方打电话,同时:

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

function expression您只能在 之后调用 。它在代码之前或之后都不可用,就像你正在做的那样:

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

因为第一行bar上的错误尚未提供。要解决此问题,请根据需要使用function declaration


要详细了解function declarationfunction expression之间的区别,我强烈建议您阅读Kangax撰写的这篇精彩文章:

答案 1 :(得分:0)

Sarfraz已经得到了很好的解释。我只想添加更多,第一个函数,

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

更加灵活,您可以在声明后添加更多属性或方法:

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

虽然function bar(){ return true; }不能这样做。 `