函数不't在添加括号的情况下调用它时运行(即使它不需要参数)
Function doesn't run when calling it with added parenthesis (even though it doesn't need parameters)
以下是我的函数,用于提醒我body
标记的childNodes
的数量。
function countBodyChildren() {
var body_element = document.getElementsByTagName("body")[0];
alert(body_element.childNodes.length);
}
window.onload = countBodyChildren;
函数运行良好,但当我将()
添加到函数名称的末尾(即window.onload = countBodyChildren();
(时,函数不会运行。为什么会这样?我想调用函数,即使它们不需要任何参数,也总是在其名称的末尾添加()
。
我想调用函数,即使它们不需要任何参数,也总是在其名称的末尾添加((。
你想得对。但在这里,您不想调用函数;你想告诉浏览器时间到了要调用哪个函数。
当您添加括号时,您将立即调用该函数(不在加载时(。功能执行;尝试查找body
元素,但尚未加载;所以你的body_element
最终变成了undefined
。在undefined
上查找childNodes
,会得到一个错误。window.onload
分配未发生。
即使您的函数没有抛出错误,它也会返回undefined
,所以window.onload
变成undefined
,所以当页面最终加载时不会发生任何事情。
相反,你需要开始思考函数只是另一种价值。当你说
function a() {
// ...
}
它与此相同:
a = function() {
// ...
};
(事实上,有一些重要的差异,但它们现在无关紧要;当你掌握了基本知识时,就去查找它们(。一个函数现在"包含"在变量a
中。然后你可以这样做:
var b = a;
b();
它会起作用——你将a
(你的函数(中的任何内容放入变量b
中,然后通过调用它的新名称来执行它(因为现在a
和b
都指同一个函数(。同样,在之后
window.onload = countBodyChildren;
CCD_ 21对象的CCD_ 20属性现在包含您的函数。然后,当加载完成时,浏览器将执行其中的任何内容。
你有一个过早执行死刑的案例。
window.onload
期望的是对函数或函数定义的引用。
当你插入括号时,你实际上执行了函数,它是分配给window.onload
的函数的返回值。
window.onload=countBodyChildren((;
这意味着"调用函数,并将函数的返回值分配给窗口对象的onload属性。您的函数什么都不返回。
例如
function countBodyChildren() {
var body_element = document.getElementsByTagName("body")[0];
alert(body_element.childNodes.length);
return 5;
}
window.onload = countBodyChildren();
这将为加载道具指定5。不是你想要的。您需要为onload道具分配一个函数引用,这样js引擎就可以在事件发生时调用该函数。
- jquery设置为使用参数运行
- 嵌入参数中的Javascript函数会自动运行
- 在页面加载完成之前,使用URL参数运行JavaScript
- 使用JavaScript中的参数运行.jar文件
- 如何在函数参数上运行jQueryif语句
- 如何使用参数按顺序运行三个任务
- PHP-如何让别人可以'不要更改url中的参数,也不要在刷新页面时再次运行脚本
- 如何使用 Muse 参数进行布尔比较以运行 JS 函数
- 函数不't在添加括号的情况下调用它时运行(即使它不需要参数)
- 当我尝试在 couchbase nodejs 服务器上运行简单的测试时,我收到“不正确的参数”错误
- 避免传递大量参数以在 JavaScript 中运行的最佳实践
- 在 Ember 视图参数更改上运行代码
- 拉斐尔未运行回调参数
- 块函数在 JavaScript 中作为参数传递时运行
- 使用可选参数器运行
- ng-重复运行次数与整数参数一样多在某些情况下不起作用
- 如何在 jQuery 函数中传递运行时参数
- 将参数传递给包含多个命令的 npm 运行脚本
- Express v4:如何在参数中间件之前运行特定于路由的中间件
- 传入函数数组作为参数,对于函数中的每个函数运行函数