亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在javascript中自執行函數的目的是什么?

在javascript中自執行函數的目的是什么?

在javascript中自執行函數的目的是什么?在javascript中,你想什么時候使用它:(function(){     //Bunch of code...})();對此://Bunch of code...
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

簡單化??雌饋砗苷?,幾乎讓人感到安慰:

var userName = "Sean";console.log(name());function name() {
  return userName;}

然而。如果我在頁面中包含一個非常方便的javascript庫,將高級字符轉換為基本級別表示,該怎么辦?

等等......什么?

我的意思是。如果有人輸入帶有某種重音的角色(例如法語或西班牙語),但我只想要'英語'字符?Az在我的節目中?嗯......西班牙語'n~'和法語'e /'字符(我已經為這些字符使用了兩個字符,但你可以在表達重音的字符中進行精神跳躍),這些字符可以被翻譯成為'n'和'e'的基本字符。

所以有一個好人已經寫了一個全面的字符轉換器,我可以包括在我的網站...我包括它。

一個問題:它有一個名為'name'的函數,與我的函數相同。

這就是所謂的碰撞。我們在相同的范圍內聲明了兩個具有相同名稱的函數。我們想避免這種情況。

所以我們需要以某種方式確定代碼的范圍。

在javascript中擴展代碼范圍的唯一方法是將其包裝在函數中:

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}

這可能會解決我們的問題?,F在所有東西都是封閉的,只能在我們的開啟和關閉支架內進行訪問。

我們在函數中有一個函數......這看起來很奇怪,但完全合法。

只有一個問題。我們的代碼不起作用。我們的userName變量永遠不會回顯到控制臺!

我們可以通過在現有代碼塊之后添加對函數的調用來解決此問題...

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}main();

或之前!

main();function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}

次要問題:“主要”這個名稱還沒有被使用的可能性有多大?......非常非常苗條。

我們需要更多的范圍。以及一些自動執行main()函數的方法。

現在我們來到自動執行功能(或自動執行,自運行,等等)。

((){})();

語法像罪一樣尷尬。但是,它的工作原理。

當您將函數定義包裝在括號中并包含參數列表(另一組或括號?。r,它將充當函數調用。

所以讓我們再看一下我們的代碼,使用一些自動執行的語法:

(function main() {
  var userName = "Sean";
    console.log(name());
    function name() {
      return userName;
    }
  })();

因此,在您閱讀的大多數教程中,您現在將使用“匿名自執行”或類似的術語進行轟炸。

經過多年的專業開發,我強烈建議您為調試目的命名您編寫的每個函數

當出現問題時(它會出現問題),您將在瀏覽器中檢查回溯。它總是更容易縮小你的代碼的問題時,在堆棧跟蹤中的條目有名字!

非常啰嗦,我希望它有所幫助!


查看完整回答
反對 回復 2019-05-28
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

自調用(也稱為自動調用)是函數在定義時立即執行的。這是一個核心模式,是許多其他JavaScript開發模式的基礎。

它是一個偉大的粉絲:)因為:

  • 它將代碼保持在最低限度

  • 它強制將行為與表達分開

  • 它提供了一個阻止命名沖突的閉包

極大 - (為什么你應該說它好?)

  • 它是關于一次定義和執行一個函數。

  • 您可以讓該自執行函數返回一個值,并將該函數作為參數傳遞給另一個函數。

  • 封裝很有用。

  • 它也適用于塊范圍。

  • 是的,您可以將所有.js文件包含在自執行功能中,并可以防止全局命名空間污染。;)

更多這里。


查看完整回答
反對 回復 2019-05-28
  • 3 回答
  • 0 關注
  • 2556 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號