簡體   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