如何使用javascript函数?(在标签中定义函数)

如何使用javascript函数?(在标签中定义函数),javascript,Javascript,定义javascript函数有不同的方法。我经常使用最简单的方法来定义函数 function myfunc(){ } 下一种在变量中定义函数的方法如下(使用方法有点混乱) 对于我来说,这是一种困难的方法,主要是在高级程序员开发的代码中发现的,如下所示 var SqueezeBox={presets:{onOpen:function(){},onClose:function(){}} 请问,有人能明确我的概念吗?我该如何使用 var SqueezeBox={presets:{onOpen:fu

定义javascript函数有不同的方法。我经常使用最简单的方法来定义函数

function myfunc(){
}
下一种在变量中定义函数的方法如下(使用方法有点混乱)

对于我来说,这是一种困难的方法,主要是在高级程序员开发的代码中发现的,如下所示

var SqueezeBox={presets:{onOpen:function(){},onClose:function(){}}
请问,有人能明确我的概念吗?我该如何使用

var SqueezeBox={presets:{onOpen:function(){},onClose:function(){}}}
他正在创建一个对象
挤压盒
包含另一个对象
预设
和两个空匿名函数,他在
{}
中定义一个与空主体内联的函数。 查看它的更好方式是这样格式化的:

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

这里已经回答了这个问题:


对于最后一个例子,正如Atropo所说,它影响了对象的匿名函数。它类似于
var
示例。

第一个代码片段是一个函数声明:

function myfunc() { }
您正在声明名为
myfunc
的命名
函数。您可以通过
myfunc.name==“myfunc”

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

var myvar = function() { };
这是分配给变量的匿名函数表达式。您可以通过
typeof myvar===“function”
myvar.name===”
验证这一点

第三个片段是javascript对象。基本上你可以把它看作是一个
地图
字典
。因此,
SqueezeBox
包含一个键
presets
,这是一个包含两个键的字典,
onOpen
onClose
,这两个键都是匿名函数

function myfunc(){}
函数声明:使用标准语法声明函数

function functionName(params[]) {
    //functionbody
}
使用此语法在作用域执行开始时声明函数,因此它们在其作用域(及其子作用域)中的任何位置都可用

这使用了称为函数表达式的模式,它只是将匿名函数的引用分配给名为
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
        }
    };

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

关于这个主题有很多有用的信息

函数可以有一个名称,如果指定,则不能更改该名称。函数也可以像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
。在这个对象中还有两个对象/标签,分别称为
onOpen
onClose
。这意味着您可以执行以下操作来使用这些功能:

SqueezeBox.presets.onOpen();
SqueezeBox.presets.onClose();
您可以将onOpen和onClose看作是对象的一部分的变量。因此,这与执行以下操作非常相似(但变量仅在
预设
对象的范围内,该对象仅在
挤压框
对象中可用)


第二个示例无效,我猜您想编写
var myvar=function(){}
最后一个函数中的可能重复项是一个匿名函数,作者如何调用该函数或为该函数设置一些代码。请您写一些关于在labeland中定义函数的内容,我可以为匿名函数做些什么。它们与普通函数一样,但未命名,因此,如果不引用它们,就无法访问它们。如果您编写
function(){…code…}
它在任何地方都不可用,因为它没有可引用的名称。
var myvar = function myFunc(){
    myFunc(); // Because it has a name you can now call it recursively
}
SqueezeBox.presets.onOpen();
SqueezeBox.presets.onClose();
var onOpen = function() {};