window.onload搭配seTimeout会报错这是为什么呢?
问题描述:
<script>
window.onload = function() {
setTimeout('haha()', 1000);
function haha() {
console.log('haha');
}
};
</script>
这样写会报错
但是去掉windows.onload就不会了
如
<script>
setTimeout('haha()', 1000);
function haha() {
console.log('haha');
}
</script>
这是为什么呢?
答
setTimeout参数是字符串时,需要是全局函数
可以这样
<script>
window.onload = function() {
setTimeout(haha, 1000);
function haha() {
console.log('haha');
}
};
</script>
也可以这样
<script>
window.onload = function() {
setTimeout('haha()', 1000);
window.haha=function() {
console.log('haha');
}
};
</script>
答
...function haha 写window.onload {}外面试试
答
setTimeout第一个参数如果是字符串类型,那么效果与Function(string)的效果类似,字符串内的代码的作用域为全局。如果在window.onload内调用那么haha函数的作用域将在window.onload的方法内,而不是全局,所以setTimeout拿不到haha函数。
解决方法:
setTimeout("haha")改为setTimeout(haha)
答
onload内部不能定义函数,需要在外面定义。
<script>
function haha() {
console.log('haha');
}
window.onload = function() {
setTimeout('haha()', 1000);
};
</script>