Javascript函数语法

时间:2010-01-14 03:21:31

标签: javascript yui

在我学习JavaScript的微弱尝试中,我买了一本书,教你如何用JavaScript做事,但忘记提及为什么。

来自PHP我熟悉典型的函数语法:

function name() {return;}

根据我的理解,在JS中也是如此。

然后我决定尝试将YUI 3框架用于一个小项目继续学习并遇到这个...... YUI Global Object

YUI().use('node', function(Y) {
   Y.Node.get('#demo');
});

据我所知,这是使用YUI()对象的'use'函数,将'node'传递给'use'函数....但是那么......为什么它在声明一个函数另一个函数调用?

有人可以解释一下这里使用的语法吗?

一个很好的参考解释JavaScript一般语法类似于php.net也是有益的。 谢谢你的帮助。

6 个答案:

答案 0 :(得分:5)

它是一个匿名函数。它被认为是一个回调。

在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');
});

这些功能都是等效的。

答案 1 :(得分:2)

在JavaScript中,函数是对象。在这种情况下,它们传入一个对象作为第二个参数值(并将其定义为内联)。

YUI().use('node', function(Y) {
    Y.Node.get('#demo');
});

与此相同:

var xxx = function(Y) {
    Y.Node.get('#demo');
};

YUI().use('node', xxx);

答案 2 :(得分:2)

这是构造一个匿名函数,然后将函数本身作为参数传递给use。然后use方法将使用一个值调用您的匿名函数,该函数将在函数中调用Y,其中包含您在use的先前参数中要求的模块。 / p>

这基本上等同于以下内容,它将myFunction作为回调传递给YUI().use,但匿名函数没有名称:

function myFunction(Y) {
   Y.Node.get('#demo');
}

YUI().use('node', myFunction);

使用此模式是因为JavaScript没有任何类型的命名空间或模块的显式概念。但是,可以通过使用函数的作用域作为一种命名空间来模拟它们。在这种情况下,YUI().use将构造一个具有您请求的所有功能的对象,并将该对象传递给您提供的函数,因此您可以使用该Y对象来调用您的方法已经进口了。

有关JavaScript语法和方法的在线参考,我喜欢使用Mozilla Developer Center文档。特别是,它们在JavaScriptDOM上有很好的参考。由于它是Mozilla项目的一部分,因此它们专注于Gecko(Firefox的渲染引擎)支持的方法和语法,但它们通常包含兼容性说明,以提及可移植的内容以及Gecko的特定内容。

对于您的问题,我建议您阅读functions and function scope上的MDC文档。可悲的是,MDC通常不会在谷歌搜索中占据优势;相反,你会得到W3Schools,这往往质量较低,广告也较多。我发现为了得到MDC文档,总是在搜索任何有关JavaScript或DOM的内容时使用“mdc”前缀是有用的。因此,例如,为了找到该链接,我搜索了mdc function,并找到了我需要的内容。

答案 3 :(得分:2)

在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的了解,所以我无法帮助你,对不起: - )

答案 4 :(得分:0)

这是匿名函数(类似于lambda function)声明。

YUI().use('node', function(Y) {
   Y.Node.get('#demo');
})

在Javascript中,函数是一等公民 - 它们是任何其他对象;因此,它们可以作为参数传递。

答案 5 :(得分:0)

所显示的内容是所谓的匿名函数,该函数作为参数传递给函数。我不认为PHP有​​这样的一流函数,所以我不知道如何解释语法(我也没有用PHP做太多,所以..)

这是我的示例代码:

function something_random(a) {
    alert("the type of a is ... " + typeof(a));
    if (typeof(a) === 'function') {
        a();
    }
}

现在考虑到这个功能,您可以将其插入Firebug或类似的东西并运行以下代码:

something_random(function () {
    alert("This is a test.");
});

这里会发生一些有趣的事情 - 你会得到两个警报。应该说“a的类型是......功能”,另一个应该说“这是一个测试”。这是因为在JavaScript中 - 以及其他一些语言 - 函数被视为对象(好吧,它们在技术上就是对象。)

如果你愿意,你可以整天抛出函数 - 它们就像数字,数组等。

也可能发生一些有趣的事情。你也可以将参数传递给匿名函数,这是jQuery做的很多事情(除了它使用call,但我们不会去那里。)这是你获得特殊内容的地方,比如你放置{代码中的{1}}。

希望这会有所帮助。