全局变量是否总是在调用javascript函数之前创建?
假设我有以下几点:全局变量是否总是在调用javascript函数之前创建?,javascript,Javascript,假设我有以下几点: <script> var foo = {myFunc:function(){..some func}}; window.addEventListener('load',foo.myFunc(),false); var bar = 'some var'; </script> var foo={myFunc:function(){..some func}; window.addEventListener('load',foo.myFunc(),
<script>
var foo = {myFunc:function(){..some func}};
window.addEventListener('load',foo.myFunc(),false);
var bar = 'some var';
</script>
var foo={myFunc:function(){..some func};
window.addEventListener('load',foo.myFunc(),false);
var bar=‘某些var’;
window.addEventListener
是否始终能够将foo.myFunc()
设置为调用加载事件的函数?设置事件侦听器时,是否存在foo未定义的可能性?何时创建foo
和bar
,何时可用
我只针对Safari 5.0+是的,执行事件处理程序时将定义
foo
和bar
通常JavaScript是逐行同步执行的。它从顶部开始,向下工作。然而,这是一个特例,因为您正在讨论变量声明。在变量和函数声明的情况下,发生。从功能上讲,你写的是:
var foo, bar;
foo = ...;
window.addEventListener(...);
var bar = ...;
因此,foo
显然是可以定义的,而bar
也是如此。这两个变量都将被函数关闭,并在执行时可用。变量定义被“提升”到给定范围的顶部,因此无论在何处声明变量,它都将在该特定范围内的任何代码运行之前存在
变量赋值在javascript文件中遇到时按顺序执行
因此,foo
将存在,但在赋值语句运行之前不会有其值
此外,您的代码应如下所示(删除myFunc之后的参数):
包含参数后,将立即调用函数并传递其返回值。如果您只想传递对函数的引用,以便
addEventListener()
以后可以调用它,那么您不需要包含参数。您可能应该使用foo.myFunc
,而不是foo.myFunc()
。后者在绑定时调用函数,而不是使函数成为事件处理程序。因此,除非foo.myFunc()
返回一个函数,否则您不想立即调用它。@cookiemonster是的,非常正确。
window.addEventListener('load', foo.myFunc, false);