Javascript函数语法
在我学习JavaScript的微弱尝试中,我买了一本教你如何用JavaScript做事情的书,但忘了提一提为什么。Javascript函数语法
从PHP来的时候,我熟悉的典型的函数语法:
function name() {return;}
从我了解的工作原理相同的JS。
然后我决定我要尝试使用YUI 3框架的小项目,继续学习,遇到这... YUI Global Object
YUI().use('node', function(Y) {
Y.Node.get('#demo');
});
据我了解,这是使用“使用'函数的YUI()对象,将'node'传递给'use'函数....但是接下来是什么......为什么它在另一个函数调用中声明一个函数?
有人可以请解释在这里使用的语法?
另外一个很好的参考,它解释了JavaScript一般语法类似于php.net也是有益的。 感谢您的帮助。
它是一个匿名函数。它被认为是一个回调。
在PHP 4和PHP 5的早期版本中您可能会看到这样的事情:
PHP
function callback($var){
...
}
array_filter($array, "callback");
在PHP 5的更新版本,您可以在线将它们定义为匿名函数。
因此,在JavaScript中,老版本是这样的:
的JavaScript
function use_callback(Y){
Y.Node.get('#demo');
}
YUI().use('node', use_callback);
但通过定义一个内联匿名函数,可以节省额外的杂波和定义函数:
YUI().use('node', function(Y) {
Y.Node.get('#demo');
});
这两个函数都是等价的。
感谢您的参考,真的帮助明确了。 – user103219 2010-01-14 04:10:04
这是一个匿名函数(类似于lambda function)的声明。
YUI().use('node', function(Y) {
Y.Node.get('#demo');
})
在Javascript中,函数是第一类公民 - 它们是任何其他对象;因此,它们可以作为参数传递。
在JavaScript中,函数是对象。在这种情况下,它们将传入一个对象作为第二个参数值(并将其定义为内联)。
YUI().use('node', function(Y) {
Y.Node.get('#demo');
});
是与此相同:
var xxx = function(Y) {
Y.Node.get('#demo');
};
YUI().use('node', xxx);
不,不是所有的Javascript都是一个对象。 – kangax 2010-01-14 05:12:05
@ kangax:你是对的,我修改了我的答案,使其更加准确。请重新考虑你已经失望了。 – 2010-01-14 06:42:05
这是构建一个匿名函数,然后传递函数本身作为参数传递给use
。然后,use
方法将使用一个值调用您的匿名函数,该函数中的值将被称为Y
,其中包含您在use
的前面参数中要求提供的模块。
这基本上等同于以下内容,这在作为回调传递myFunction
到YUI().use
,不同的是匿名函数不具有名称:因为JavaScript不
function myFunction(Y) {
Y.Node.get('#demo');
}
YUI().use('node', myFunction);
这种图案用于有任何形式的命名空间或模块的明确概念。但是,可以通过使用函数的作用域作为一种名称空间来模拟它们。在这种情况下,YUI().use
将构建一个具有您请求的所有功能的对象,并将该对象传递给您提供的函数,因此您可以使用该对象调用您已导入的方法。
对于JavaScript语法和方法的一个很好的在线参考,我喜欢使用Mozilla Developer Center文档。特别是,他们在JavaScript和DOM上有很好的参考。由于它是Mozilla项目的一部分,它们专注于Gecko(Firefox的渲染引擎)支持的方法和语法,但它们通常包含兼容性说明以提及可移植性和Gecko特有的内容。
对于你的问题,我建议阅读关于functions and function scope的MDC文档。令人遗憾的是,MDC通常不会在谷歌搜索中名列前茅;相反,你会得到W3Schools,这往往是质量较低,并有更多的广告。我发现,为了获得MDC文档,总是在我的搜索前添加JavaScript或带有“mdc”的DOM前缀,所以,例如,找到那个链接,我搜索了mdc function,并找到了我需要的。
在javascript中,函数可以作为变量传递。所以,这里的是,YUI代码可能已被写入
//original
YUI().use('node', function(Y) {
Y.Node.get('#demo');
});
//more traditional "global function"
function useNode(Y) {
Y.Node.get('#demo');
}
YUI().use('node', useNode);
//local callback function
var myUseNode = function(Y) {
Y.Node.get('#demo');
}
YUI().use('node', myUseNode);
编辑至于你的问题下半年一些其他的方法,你可以写我所知道的关于PHP上邮票,这样我就可以” t帮助你,对不起:-)
显示的内容是什么被称为匿名函数作为参数传递给函数。我不认为PHP有这样的一流功能,所以我不知道如何解释语法(我也没有用PHP做太多,所以..)
这是我的示例代码:
function something_random(a) {
alert("the type of a is ... " + typeof(a));
if (typeof(a) === 'function') {
a();
}
}
有了这个功能
现在,你可以插入到这个萤火虫或类似的东西,并运行下面的代码:
something_random(function() {
alert("This is a test.");
});
一些有趣的将发生在这里 - 你会得到两个警报。应该说“a的类型是......功能”,另一个应该说“这是一个测试”。这是因为在JavaScript以及其他一些语言中,函数的处理就像对象一样(从技术上讲它们是对象)。
如果你喜欢,你可以整天抛出函数 - 它们就像数字,数组, 等等。
有趣的事情也可能发生。你也可以将参数传递给匿名函数,这是jQuery所做的很多事情(除非它使用call
,但我们不会去那里)。这就是你得到特殊东西的地方,比如你把function(d) {}
放在代码中。
希望这会有所帮助。
这么多好的答案感谢大家清理它。 – user103219 2010-01-14 04:09:32