簡體   English   中英

函數如何在定義范圍的頂部移動

[英]how can a function move at the top of the scope in which it is defined

我正在閱讀javascript : The Good Partsjavascript : The Good Parts功能聲明與功能Expression B.9節。 有一行說

功能聲明可能會被吊起。 這意味着無論將函數放在何處,都將其移至定義該函數的作用域的頂部。 這放寬了在使用函數之前必須聲明函數的要求,我認為這會導致草率

因此,據此我做了一個簡單的實驗,如下所示:

<html>
<script type="text/javascript">


var x = function(){

    alert(s);

    var s = function(){
        return 'sanmevg'; 
    }

};  
</script>   

<body>


<button onclick="x();">click here</button>  

</body></html>

現在根據這本書,它明確指出:

它被移到定義它的范圍的頂部。 這放寬了在使用函數之前必須聲明函數的要求

因此,這意味着單擊該按鈕時,應該有一個alert sanmveg 但是結果出乎意料,它返回Undefined

我的問題

1)我是否應該接受Douglas CrockfordDouglas Crockford所寫的聲明,並糾正某些特殊情況(如果是的話,那么足以告訴我這些情況)?

2)它反映了其他含義嗎?

3)我的實驗做錯了嗎?


感謝您的所有回答!

因為那不是函數聲明:

var s = function(){
    return 'sanmevg'; 
}

它是分配給變量的匿名函數。 更改它,它將起作用:

function s(){
    return 'sanmevg'; 
}

Phylax所說

“請注意, 將掛起 var s 。這就是為什么 alert() 顯示為 undefined 而不是錯誤的原因。但是分配的內容將保留在原處。”

您鍵入的是函數表達式而不是函數聲明。

懸掛了一個函數聲明,這就是為什么您可以在定義該函數的位置以及所閱讀內容的上方調用該函數的原因。

function myFunction(){
  alert('myFunction');
}

但是,您鍵入的是函數表達式。 聲明的變量被吊起,但功能分配保持不變。

var myFunction = function(){
  alert('myFunction');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM