Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数调用不能以这种方式工作?_Javascript_Function - Fatal编程技术网

Javascript 为什么函数调用不能以这种方式工作?

Javascript 为什么函数调用不能以这种方式工作?,javascript,function,Javascript,Function,这是我在加载页面时测试的脚本 window.onload = initAll; function initAll() { document.getElementById("pTag").innerHTML = "Hello Java Script !"; } 上面的脚本工作正常,直到我在调用期间放入类似initAll()的括号_(window.onload=initAll();)z。如果在函数调用期间使用initAll(),则不会发生任何情况。好像剧本不在那里 为什么会这样?窗口。onloa

这是我在加载页面时测试的脚本

window.onload = initAll;

function initAll() {
document.getElementById("pTag").innerHTML = "Hello Java Script !";
}
上面的脚本工作正常,直到我在
调用期间放入类似
initAll()的括号_(window.onload=initAll();)z
。如果在函数调用期间使用
initAll()
,则不会发生任何情况。好像剧本不在那里


为什么会这样?

窗口。onload
希望您为其设置的值是一个函数(函数与JavaScript中的任何其他对象类似)

如果在
initAll
之后加上paren,实际上是调用函数并将
window.onload
设置为函数的返回值。由于该函数不显式返回任何内容,因此该值是未定义的。因此,在实践中,您可以考虑以下代码:

window.onload = initAll();

function initAll() {
    // do something with document
}
var result = initAll();
window.onload = result;

function initAll() {
    return null;
}
等同于本规范:

window.onload = initAll();

function initAll() {
    // do something with document
}
var result = initAll();
window.onload = result;

function initAll() {
    return null;
}

我确信您可以立即看到这不起作用的原因。

窗口。onload
希望您为其设置的值是一个函数(函数与JavaScript中的任何其他对象类似)

如果在
initAll
之后加上paren,实际上是调用函数并将
window.onload
设置为函数的返回值。由于该函数不显式返回任何内容,因此该值是未定义的。因此,在实践中,您可以考虑以下代码:

window.onload = initAll();

function initAll() {
    // do something with document
}
var result = initAll();
window.onload = result;

function initAll() {
    return null;
}
等同于本规范:

window.onload = initAll();

function initAll() {
    // do something with document
}
var result = initAll();
window.onload = result;

function initAll() {
    return null;
}

我确信您可以立即看到这不起作用的原因。

因为您不应该在该行执行函数,所以您应该为窗口对象分配一个事件处理程序,它将在触发
load
事件后触发/执行,而不是函数的返回值


但是,不建议分配事件处理程序
window.onload
,因为它只允许附加一个处理程序。考虑使用.< /p> ,因为您不应该在该行执行函数,应该将事件处理程序指派给窗口对象,一旦Window对象被触发/执行,一旦<代码>加载>代码>事件被触发,而不是函数返回值。


但是,不建议分配事件处理程序
window.onload
,因为它只允许附加一个处理程序。考虑使用.

,因为您没有直接在Windows .OnLoad语句中调用函数,但您正在为OnLoad事件分配函数。当事件发生时,系统将自动调用initall函数。这就是为什么您需要函数本身(不带括号),而不是调用(带括号)

的原因,因为您不是在window.onload语句中直接调用函数,而是将函数分配给onload事件。当事件发生时,系统将自动调用initall函数。这就是为什么需要函数本身(不带括号),而不是调用(带括号)

这与Javascript的工作方式有关。函数实际上也是对象,就像javascript中的所有东西一样。 因此,基本上,您是将“Object”
initAll
(恰好是一个函数)分配给
window.onload
。然后在触发onload事件时调用该对象,假设它是一个函数


现在,当您在对象名称后面加括号时,基本上是告诉它将该对象视为函数并调用它。这不是将其分配给属性的方式,例如
窗口.onload
属性。

这与Javascript的工作方式有关。函数实际上也是对象,就像javascript中的所有东西一样。
window.onload = initAll;
因此,基本上,您是将“Object”
initAll
(恰好是一个函数)分配给
window.onload
。然后在触发onload事件时调用该对象,假设它是一个函数

现在,当您在对象名称后面加括号时,基本上是告诉它将该对象视为函数并调用它。这不是将其分配给属性的方式,例如
window.onload
属性

window.onload = initAll;
您正在将
initAll
函数绑定到
window
对象的
onload
事件。该函数将成为加载处理程序。现在,当
加载
事件在
窗口
对象触发时,将调用此函数


您将立即调用函数
initAll
。此调用返回
undefined
(在您的情况下),并且
undefined
值将分配给
window.onload
。将
undefined
值指定给
onevent
属性显然没有效果

您正在将
initAll
函数绑定到
window
对象的
onload
事件。该函数将成为加载处理程序。现在,当
加载
事件在
窗口
对象触发时,将调用此函数



您将立即调用函数
initAll
。此调用返回
undefined
(在您的情况下),并且
undefined
值将分配给
window.onload
。将
undefined
值指定给
onevent
属性显然没有效果。

当您省略此调用中的括号时:

window.onload = initAll;
您正在为window.onload事件指定函数
initAll()
的参考值。这导致函数在调用onload事件时执行,因为它们共享相同的引用点。当您这样使用作业时:

window.onload = initAll();

您正在为window.onload事件分配函数的返回值,在本例中为null。

当您省略此调用中的括号时:

window.onload = initAll;
您正在为window.onload事件指定函数
initAll()
的参考值。这导致函数在调用onload事件时执行,因为它们共享相同的referec