是否总是在调用javascript函数之前创建全局变量?

时间:2014-01-23 03:23:49

标签: javascript

说我有以下内容:

<script>

var foo = {myFunc:function(){..some func}};

window.addEventListener('load',foo.myFunc(),false);

var bar = 'some var';

</script>

window.addEventListener是否始终能够将foo.myFunc()设置为调用加载事件的函数?在设置事件监听器时,foo是否有undefined的可能性?何时创建foobar,何时可以使用?

我只定位Safari 5.0 +

2 个答案:

答案 0 :(得分:1)

是的,在您的事件处理程序执行时,将定义foobar

通常,JavaScript会逐行同步执行。它从顶部开始,向下工作。但是,这是一个特例,因为你在讨论变量声明。在变量和函数声明的情况下,"hoisting"发生。功能上发生的事情是你写的:

var foo, bar;

foo = ...;

window.addEventListener(...);

var bar = ...;

因此,显然可以保证定义foobar也是如此。{{1}}。这两个变量都将由函数关闭,并在执行时可用。

答案 1 :(得分:1)

变量定义被“提升”到给定范围的顶部,因此无论在何处声明变量,它都将在任何代码在该特定范围内运行之前存在。

变量赋值按照javascript文件中的顺序执行。

因此,foo将存在,但在赋值语句运行之前不会有其值。


此外,您的代码应为此(在myFunc之后删除parens):

window.addEventListener('load', foo.myFunc, false);

当包含parens时,会立即调用该函数并传递其返回值。如果您只想传递对该函数的引用,以便addEventListener()可以稍后调用它,那么您不需要包含该parens。

相关问题