[英]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.