[英]What is the order of execution of declarations in JavaScript?
<script type="text/javascript">
function func(){
}
var foo="foo";
</script>
<script type="text/javascript">
var foo="foo";
function func(){
}
</script>
刚开始时,当func是一个函数而foo是“未定义”时,但是我想知道哪个是第一个要定义的函数,func或foo?
变量和函数声明(以及函数代码的形式参数)的标识符都是在进入执行上下文时创建的 ,而实际上是在代码执行之前。
如前所述,就变量而言,变量是在该阶段用未定义的值初始化的,当控制到达赋值表达式时,赋值便会发生,例如:
var foo = "outer";
(function () {
alert(foo); // undefined
var foo = "inner";
})();
在上面的代码中,我们可以看到foo
标识符如何保存undefined
值,这是因为在进入函数执行上下文时,已初始化本地foo
变量。
这就是人们建议在函数顶部声明变量的原因之一(类似于实际发生的情况)
函数的声明也悬挂 ,可以将其申报前实际使用它们,因为我们知道,它是在代码执行之前提出的,例如:
func(); // "bar"
function func () {
return "bar";
}
也可以看看:
在
var foo = "foo";
function func() {
}
有两件事发生
foo
和func
同时声明。
func
的初始化被提升到顶部。 因此,函数在var
之前初始化。
所以操作顺序是
foo
和func
声明 func
初始化为Function
对象 foo
初始化为"foo"
这是代码中最清楚的
var foo = bar;
function bar() {}
在此代码运行之后的位置, typeof foo === 'function'
。
我相信标识符会在遇到声明时被定义。
javascript中的函数总是先解析和定义的。
<script type="text/javascript">
alert('before func: ' + func); // Print function as string
alert('before somevar: ' + somevar); // Print undefined
function func() {
}
var somevar = "hello";
alert('after func: ' + func); // Print function as string
alert('after somevar: ' + somevar); // Print hello
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.