繁体   English   中英

JavaScript中声明的执行顺序是什么?

[英]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() {
}

有两件事发生

  1. 宣言
  2. 初始化

foofunc同时声明。

func的初始化被提升到顶部。 因此,函数在var之前初始化。

所以操作顺序是

  1. foofunc声明
  2. func初始化为Function对象
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM