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