簡體   English   中英

一個簡單的函數聲明會在JavaScript中形成一個閉包嗎?

[英]Will a simple function declaration form a closure in JavaScript?

以下代碼是否會形成閉包?

function f() {}

定義此函數的位置會影響答案嗎?

是的,它形成了一個封閉。

閉包是函數引用和創建函數的環境的組合。 無論函數如何調用,函數中的代碼始終都可以訪問創建函數的作用域中定義的任何變量。

例; 函數f將始終使用變量x即使它在x不可達的范圍內調用:

 function container() { var x = 42; function f() { document.write(x); } return f; } var func = container(); func(); // displays 42 //document.write(x); // would give an error as x is not in scope 

當函數在其詞法范圍內引用變量時,您可以創建一個閉包:

var a = 'foo'
function f() {} // no closure
function f() {return a} // closure

如果在函數中放置一個debugger語句,您可以在Chrome devtools中看到該閉包包含的內容。 你會看到第一個例子什么都沒有,而第二個例子會顯示a: 'foo'

是的,它始終定義一個閉包,無論它在何處定義。 教程有一些說明性示例。

因為javascript是一種特殊語言(請參閱范圍,提升以及最近的TDZ),根據您在問題中的具體具體情況,您可能會得到不同的答案。

這是一個javascript關閉? 請參閱Mozilla的定義https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

它是在一個閉包中捕獲的(還是形成一個閉包 - 最初的問題)? 取決於優化。 但很可能是的。 請參閱http://dmitrysoshnikov.com/ecmascript/chapter-6-closures/ ,更重要的是https://en.wikipedia.org/wiki/Closure_%28computer_programming%29

javascript“福音傳道者”使用關閉術語來識別那些在實際閉包中沒有被捕獲時無法正常工作的函數 - 這是從基本操作的角度說出它的正確方法。 原因可能是由於缺乏更好的術語而不是其他任何東西。

暫無
暫無

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

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