English 中文(简体)
Java: “有效载荷”({})如何不同于“上载=功能(})”?
原标题:JavaScript: How is "function onload() {}" different from "onload = function() {}"?

在对。 这个问题,我们读到Function f(){}在当地界定了名称,而[var] f = 功能(}在全球界定了该名称。 这对我来说是完美的,但有些奇怪的行为在两项声明之间有所不同。

我用文字制作了一个超文本页。

onload = function() {
    alert("hello");
}

它按照预期开展工作。 当我改为

function onload() {
    alert("hello");
}

没有发生。 (Firefox仍然发射该事件,但WebKit、歌剧和因特网探索者 did,尽管坦率地说,我没有提出正确的想法。)

在这两种情况下(在所有浏览器中),我可以核实:window.onloadonload均被设定为这一功能。 在这两种情况下,全球物体代码ts被贴在窗户上,而无论我如何写上声明,window的标语正得到财产罚款。

这里的情况如何? 为什么一项声明与另一项声明不同? 这是否是 Java语的qui子,即OM,还是两者之间的互动?

最佳回答

这两条幻灯宣布,目前范围的职能为“上载”。 没有约束力。

function onload() { 。。。 }

var onload = function() { 。。。 }

该刀切将一项功能分配给目前范围称为“上载”的财产/可变/领域:

onload = function() { 。。。 }

The reason why Firefox performed the binding and raised the onload event on the 1st snippet and the others didn t might be because the Firefox chrome (its user interface) itself is written and automated using JavaScript - that s why it s so flexible and easy to write extensions on it。 Somehow, when you declared the locally-scoped onload function that way, Firefox "replaced" the window s (most likely the local context at the time) implementation of onload (at that time, an empty function or undefined), when the other browsers correctly "sandboxed" the declaration into another scope (say, global or something)。

问题回答

许多人正确地指出了全球/地方的差别(UPDATE:这些答案大多被作者删除:)。

var x = function() {

以及

function x() {

但是,这实际上并没有回答你的具体问题,因为你实际上没有做其中的第一个。

两者在你的例子中的差异是:

// Adds a function to the onload event
onload = function() {
    alert("hello");
}

......

// Declares a new function called "onload"
function onload() {
    alert("hello");
}

在此,根据Tim Down的有益评论和与Jonathan Pan的简短讨论,我认为正在做些什么:

当贾瓦语译员分配到window.onload上的财产时,它就是指浏览器给它的一个物体。 它援引的是通知,该财产称为onload,因此与其余浏览器和电线相连。 所有这些都不属于贾瓦伦文的范围,而该书仅证明财产已经确定。

当你撰写一份声明<代码>上载(>{<>>>/代码>时,定型号的呼唤完全相同。 由于声明导致在p时间而不是评价时间上进行转让,因此文字解释者在不告诉浏览器的情况下,可以生成变数;或者,窗户则愿意接收活动。 不管怎样,浏览器确实没有机会看到转让,就像在你写上<编码>onload =功能(}<>>/代码”时那样。

最简单的解释:

function aaaaaaa(){

可在申报前使用:

aaaaaaa();
function aaaaaaa(){

}

但这项工作不多:

aaaaaaa();
aaaaaaa=function(){

}

这是因为,在第三部法典中,你将aaaaaaa指定为匿名职能,而不是宣布为职能。

var onload = function() {
    alert("hello");
}

在当地宣布。

我建议你阅读这一非常有益的条款:

造成错误:

foo();
var foo = function(){};

::

foo();
function foo(){}

因此,当你重新利用职能来调整和制定你的法典时,第二行就显得格不入,而第一个星子是功能数据模式的nic子。





相关问题
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.

热门标签