JavaScript语法功能的不同吗?

JavaScript function different syntax?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between a function expression vs declaration in JavaScript?
This JavaScript syntax I haven't seen till now, what does it do really?

以下两种编写函数的方法有什么区别?我看到两个都用过,但我不确定哪一个是"正确的"。

1
2
3
4
5
6
7
8
function init() {

}


init: function() {

},

第二种方式写作的好处是什么?


函数声明

1
2
3
function init() {

}

函数表达式

1
2
3
var init = function() {

};

主要的区别与javascript中的Variable Hoisting有关。您可以在这里阅读更多信息:http://www.adequatelygood.com/2010/2/javascript-scoping-and-lifting和http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

通过您的例子,我相信您也有兴趣在object literals中定义anonymous functions。下面是一个例子:

1
2
3
4
5
6
7
//obj is the object name
var obj = {
    //init is the property name or key and the anonymous function is the value
    init: function() {
    },
    anotherProp: 'some value'
};

使用方法如下:

1
2
obj.init();
alert(obj.anotherPorp);

在对象文本中,对象的不同属性是用key: value语法定义的,并使用逗号将它们分开。

我建议您在javascript http://learn.appendto.com/lessons上浏览这个免费系列,它将为您解答许多这些问题,并为您成为JS开发人员提供坚实的基础。


第一个示例定义了全局范围内的函数,可以使用init()调用该函数。第二个定义了名为init的对象的属性,即右边的函数声明。

通常,第二个示例提供了一个较小的范围,您可以在其中执行函数。

第一个示例允许您这样调用函数:

init();

第二,更可能是:

1
2
3
4
5
var thing = function() {
    init: function() { }
};

thing.init();


第二个只能在对象文本的上下文中使用:

1
2
3
4
5
6
7
8
9
10
11
var myNamespace = {
    func1: function () {
        // do something
    },

    func2: function () {
        // do something else
    },

    someValue = 5
};

第一个表单作为语句执行。相当于:

1
2
3
var init = function () {
    // do something
};

尝试始终使用:

1
2
3
init: function (){

}

在编写对象文本时。

当您试图处理一个全局函数时,将其设置为var,因此:

1
2
3
var init = function(){

}

记住,每个都有自己的位置,但我个人喜欢为我正在处理的项目编写一个名称空间,并使用一个对象文本。

现在,只有在设置对象后,这两个选项才能在对象中使用。另一种方法有点马虎,现在很少使用,但无论操作顺序如何,都可以调用它,因此可以在代码中设置它之前或之后调用它…同样,这在很多情况下被抛弃了。

1
2
3
function init(){

}