2013-09-27 58 views
-3

定义javascript函数有多种不同的方法。我经常用最简单的方法来定义函数如何使用javascript函数? (定义标签中的函数)

function myfunc(){ 
} 

,并在这样的变量定义函数的下一个方式(有点混乱使用的方式)

var myvar = myfunc(){ 
/*some code*/ 
} 

和困难方法对我来说,大多在代码中发现开发高级程序员像下面

var SqueezeBox={presets:{onOpen:function(){},onClose:function(){}} 

请,任何人都可以清楚我对这个概念,我如何使用?

+5

第二个例子是无效的,我想你想写'VAR MYVAR =函数(){} [VAR functionName =函数(){} VS功能使用functionName(){}'的可能 –

+1

重复](http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) – CodingIntrigue

+0

最后一个是匿名函数,作者如何调用函数或为该函数设置一些代码。 –

回答

0

var SqueezeBox={presets:{onOpen:function(){},onClose:function(){}}} 

他创建包含另一个对象presets对象SqueezeBox有两个空的匿名函数,他的定义与{}内的空体函数内联。 一个更好的办法,看看它的格式是这样的:

var SqueezeBox={ 
        presets:{ 
          onOpen:function(){/* empty function body */}, 
          onClose:function(){/*empty function body */} 
          } 
        } 
1

第一代码片段是函数声明

function myfunc() { } 

您声明名为function称为myfunc。您可以通过myfunc.name === "myfunc"

验证您的第二个代码段包含语法错误。我相信你的意思是:

var myvar = function() { }; 

这是分配给可变匿名函数表达式。您可以通过typeof myvar === "function"myvar.name === ""进行验证。

第三个片段是一个javascript对象。基本上你可以认为它是MapDictionary<string, object>。所以SqueezeBox包含1个密钥presets,这又是一个包含2个密钥的字典,onOpenonClose,它们都是匿名函数

3
function myfunc(){} 

函数声明:该功能是使用标准语法

function functionName(params[]) { 
    //functionbody 
} 

使用这种语法声明声明在开始执行范围的功能,所以他们会在提供无处不在的范围(以及它们的下级范围)。

var s = myfunc(); //s == 0 
function myfunc() {return 0;} 

var myfunc = function() {}; 

这使用称为函数表达式图案,它只是分配的匿名函数到名为myfunc变量的引用。使用此语法将不允许您在解析变量之前使用该函数。即使变量在其范围的顶部悬挂,在翻译时分析它们他们正在初始化,所以上面的例子则不行:

var s = myfunc(); //ReferenceError: myfunc is not defined 
var myfunc = function() {return 0;}; 

但低于意愿例如:

var myfunc = function() {return 0;}; 
var s = myfunc(); //s == 0 

第三个例子只是以我们刚刚完成函数表达式的方式为对象属性(也称为对象方法)分配一个匿名函数,因此如果使用上述模式,代码将变为:

var onOpen = function() {}, 
    onClose = function() {}, 
    SqueezeBox = {//curly braces denotes an object literal 
     presets: {//again, this is a nested object literal 
      onOpen: onOpen, 
      onClose: onClose 
     } 
    }; 

这与您的示例完全相同,唯一的区别在于,在将对象传递给对象之前,我使用了一个变量来获取对匿名函数的引用。如果您需要了解更多关于物体的信息,我建议您阅读MDN docs。无论如何,如果你真的对JS的工作方式感兴趣,我建议Javascript Garden,这是一个关于JS的非常好的文章。

+0

请问您可以写一些关于标签 –

+0

中的函数的定义以及我可以为匿名函数做些什么。 –

+0

它们就像普通函数一样,但它们是未命名的,所以不能在没有引用它们的情况下访问它们。如果你编写'function(){... code ...}',它将不会在任何地方使用,因为它没有被引用的名字。 –

0

有关于这个问题here

函数可以有一个名字,如果指定了不能改了很多有用的信息。函数也可以像JavaScript中的任何其他对象一样分配给变量。

第一个例子是一个函数声明:

function myfunc(){ 
} 

使用函数的声明,你将能够在该函数声明封闭范围内的任意位置调用该函数,即使是后宣布它被使用。

另外两个例子是函数表达式:

var myvar = function(){ 
/*some code*/ 
} 

var SqueezeBox= { 
    presets: { 
     onOpen:function(){/* empty function body */}, 
     onClose:function(){/*empty function body */} 
    } 
} 

使用你给一个变量赋值功能函数表达式。当你这样做时,你必须在使用它们之前声明它们。大多数时候,你看到这个功能将是匿名的,但它有可能举出在表达式中的函数:

var myvar = function myFunc(){ 
    myFunc(); // Because it has a name you can now call it recursively 
} 

如果这样做,myFunc功能是唯一可用的函数体中,因为它是仍然是函数表达式而不是声明。

第三个示例声明了一个javascript对象字面值SqueezeBox,在该对象内有另一个名为presets的对象。在这个对象内还有两个对象/标签,称为onOpenonClose。这意味着你可以做以下使用这些功能:

SqueezeBox.presets.onOpen(); 
SqueezeBox.presets.onClose(); 

你可以认为的OnOpen和OnClose中的作为作为对象的部分变量。因此它与进行以下操作非常相似(但该变量仅在presets对象的范围内,该对象仅在SqueezeBox对象中可用)。

var onOpen = function() {}; 
相关问题