English 中文(简体)
监督职能?
原标题:delcare a function?
  • 时间:2009-12-19 12:23:12
  •  标签:
  • javascript

i 想知道这两项声明之间的区别:

var delay = (function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();


function delay {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
}
最佳回答

第一项功能声明使用匿名功能,对<代码>日码/代码>和第二个匿名功能加以关闭,以避免将全球名称空间与<代码>日码<>。 这是一种简单的手工艺,可在 Java本功能内执行数据,并static factors

第一种/外派职能通常只得到一次使用,这就是为什么从来没有获得名字,而是立即作为匿名职能执行。 然而,如果你需要能够为多重事件创造多重时间,情况恰恰相反。

考虑如下:

var delayBuilder = function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
}

现在:

var delay = (function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

相当于:

var delay = delayBuilder();

因此,如果你需要多重拖延(同时不止一个时间过长),你可以做到:

var delay1 = delayBuilder(), delay2 = delayBuilder(), ... delayN = delayBuilder();

// And of course, used as:
delay1(callback, ms);

更概括地说,你有职能建立职能,即<代码>funcBuilder和func(使用“func”一词,因为“功能”是一个保留词)。

var func = funcBuilder(configurationifany);

因此,如果该功能的建设者更为复杂,而且你希望对它正在建设的任何功能进行单一、 throw弃的检查,那么你就可以这样做。

funcBuilder(configurationifany)(etc, etc);

或者就你所贴出的法典而言(尽管这只是简单总结<条码>>准时/代码>,但只是继续树立了榜样):

delayBuilder()(callback, ms);

它实际上减少了使用。 如果你不再使用这一职能不止一次,那么,保持这一职能并作为匿名职能加以执行是没有道理的。 如果你需要建立多种职能,那么保留提及职能建设者就有意义。

问题回答

履行另一项职能的目的是为职能之外宣布的变数创造一个范围,而不必在全球申报。 外部职能在设立后即立即执行(在声明发表后将括号放在括号内),因此内部职能被退回并分配给变量。

在第一种例子中,<代码>日码变量在内部功能中使用,因此设定了包含变量的封闭状态。 当你后来使用该功能时,它仍可使用<代码>日码<>代码>变量,尽管该功能本身不在功能范围之内。 外部功能得以执行,从而恢复内部功能,并分配给<代码>delay变量。

讨论两项声明之间的区别是毫无意义的。 第二项声明只宣布了外部功能,但既未储存,也未执行,因此它只是thrown弃。

Edit:
In your updated question (if corrected by adding parentheses efter the function name in the second declaration), the second declaration is a function that returns the same result that is assigned to the variable in the first declaration. So to get the same result you have to call the function and assign the return value to a variable:

var d = delay();

如今,<代码>d变量与<代码>delay变量在第一个例子中相同。

在第二种情况下,你放弃了交还的职能。

如果我理解你的问题,那就是,如果你想要第二个案件的话。

function delay() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
}

那么,差别在于,被储存的法典没有执行。 如果你在以后打电话延迟,那将是等同的,差额是职能匿名和<代码>delay的价值。 (第一种情况下,它发挥内部职能,第二种是外部职能)。

在第一种情况下,你创立了一个匿名职能。 第二,你创立了匿名职能,但既不称匿名,也不将其保存在一个变数中。 我甚至不相信这种法律。

第一种情况是用功能表述生成匿名功能,即时使用,在封闭状态中填入“<代码> 日码/代码>变量,并将另一个功能(以功能表述生成)。

第二例是同义词错误(因为功能表述没有背景,职能声明没有名称)。

自现在起,您已经编辑了这本书。

第二种情况是使用职能声明,但并未称职。 因此,它现在将做匿名职能(而不是交还的职能)。





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.