Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局变量是否总是在调用javascript函数之前创建?_Javascript - Fatal编程技术网

全局变量是否总是在调用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);