use*_*207 3 javascript function
这里是我的功能来提醒我数childNodes了的body标签.
function countBodyChildren() {
var body_element = document.getElementsByTagName("body")[0];
alert(body_element.childNodes.length);
}
window.onload = countBodyChildren;
Run Code Online (Sandbox Code Playgroud)
该函数运行正常,但当我添加()到函数名称的末尾,即window.onload = countBodyChildren();函数不运行.为什么是这样?我想调用函数,即使它们不需要任何参数,你总是将()它添加到它的名字的末尾.
我想调用函数,即使它们不需要任何参数,你总是将()添加到它的名字的末尾.
你没想到.但是在这里,你不想调用这个函数; 你想告诉浏览器什么时候来电话.
添加括号时,将立即调用该函数(不加载).该函数执行; 试图查找body元素,但还没有加载; 所以你body_element最终成为undefined.你抬头childNodes上undefined,并得到一个错误.window.onload任务不会发生.
即使你的函数没有抛出错误,它也会返回undefined,所以window.onload变成了undefined,所以当最终加载页面时没有任何反应.
相反,你需要开始认为函数只是另一种价值.当你说
function a() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
它与此相同:
a = function() {
// ...
};
Run Code Online (Sandbox Code Playgroud)
(实际上存在差异,重要的是,但它们现在无关紧要;当你掌握了基础知识时,请查看它们).函数现在"包含"在变量中a.然后你可以这样做:
var b = a;
b();
Run Code Online (Sandbox Code Playgroud)
它会工作-你把什么是a(你的函数)到变量b,然后通过调用其新名称执行它(因为现在无论a和b指向同一个函数).以同样的方式,之后
window.onload = countBodyChildren;
Run Code Online (Sandbox Code Playgroud)
对象的onload属性window现在包含您的函数.然后,浏览器将执行加载完成后的任何操作.
你有一个过早执行的情况.
| 归档时间: |
|
| 查看次数: |
3426 次 |
| 最近记录: |