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

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

如果無法訪問任何變量,那么為什么我可以通過函數訪問它?

如果無法訪問任何變量,那么為什么我可以通過函數訪問它?

偶然的你 2022-05-26 11:15:42
我已經閱讀了很多關于這個主題的內容,但我仍然不清楚......如果 IIFE 完全是關于隱私(//+不污染全局名稱空間...//),那么為什么我可以使用函數參數訪問 IIFE 變量?結果將顯示 1200。所以不,我知道“a”是 200,所以我訪問了它。這背后的邏輯是什么?如果每個人都說我不能,為什么我可以訪問該變量?(sum=function(b){  var a= 200;  return a+b;})();console.log(sum(1000)); //1200 console.log(a); //error as expected第2部分:如果一個IIEF一旦被調用就消失了,那為什么我可以執行多次?(sum=function(){  console.log("random text");})();sum(); /*this can relaunch the function even "iief is only used once" + I can do that multiple timessum(); //'random text' 'random text' ...第 3 部分:為什么當我為 IIEF 命名時可以重新啟動代碼段?我到處讀到,IIFE 只使用一次……一旦它們啟動,它們就消失了……(function sum(){  console.log("random text");})();sum(); //I can execute the IIEF as many times as I wish however I shouldn't be able to
查看完整描述

2 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

你那里沒有IIFE。

(和之間的代碼)將函數分配給隱式全局變量sum

然后()after 它然后執行評估表達式的結果(這是同一個函數)。


查看完整回答
反對 回復 2022-05-26
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

您的示例代碼沒有明確聲明sum為變量,因此它是隱式的 global?;旧?,如果它在腳本中處于全局級別,則您的代碼將被解釋為:


var sum = function(b) {

  var a = 200;

  return a+b;

};

sum();

console.log(sum(1000));

一般來說,IIFE 的目的是創建一個命名空間,最終可以小心地將其導出到有限數量(希望為 1)的全局符號。在函數的私有命名空間內,可以聲明各種數據結構和函數并隨著時間的推移對其進行操作,所有這些都與其他代碼完全隔離。


我認為您的代碼中的關鍵錯誤是假設有必要將匿名函數保存在某處。根據我的經驗,這不是一件常見的事情。通常它看起來像:


(function(args) {

  // code, possibly a whole lot

})(parameters);


查看完整回答
反對 回復 2022-05-26
  • 2 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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