麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

作用域,作用域鏈,閉包

2024-04-27 15:18:19
字體:
來源:轉載
供稿:網友

閉包、作用域、作用域鏈

一 作用域,作用域鏈

先上代碼

復制代碼
1 var scope="global";  2 function t(){  3     console.log(scope);  4     var scope="local"  5     console.log(scope);  6 }  7 t();  復制代碼

此時打印出來的 按順序分別是undefine,local,為什么第一個是undefined呢,摘抄下js作用域原話:

javascript沒有塊級作用域,而是函數作用域.

所謂函數作用域就是說:-》變量在聲明它們的函數體以及這個函數體嵌套的任意函數體內都是有定義的。

所以此段代碼就可以解釋為:

復制代碼
var scope="global";   function t(){     var scope;      console.log(scope);       scope="local"       console.log(scope);   }   t();  復制代碼

所以明顯看出來第一句打印,只是重新聲明了變量,而沒有賦值

 

二 閉包與this

在閉包中使用this對象會出現一些問題,this對象是運行時基于函數的執行環境綁定的:在全局函數中,this等于window,而當函數被當作某個對象的方法調用時,this等于那個對象。不過,匿名函數的執行環境具有全局性,因此其this對象通常指向window(當然,在通過call()和apply()改變函數執行環境時,this指向其他對象)。

復制代碼
var name="The Window";      var object={      name:"My object",      getNameFunc:function(){          return function(){              return this.name;              };          }      };  alert(object.getNameFunc()()); //"The Window"(在非嚴格模式下)此時彈出  The Window復制代碼

如果要改變,那么我自己的理解就是讓閉包能 根據活動函數上下文找到 外部函數的變量,那么就把this重新賦值給一個變量

復制代碼
var name="The Window";      var object={      name:"My object",      getNameFunc:function(){      var that = this;        return function(){              return that.name;              };          }      };  alert(object.getNameFunc()()); //"The Window"(在非嚴格模式下)此時彈出  My object復制代碼

 

三 閉包的內存釋放與執行規則

直接上代碼

復制代碼
function fun03()        {            var a = 10;            return function(){                a*= 2 ;                return a ;            };        }          var f = fun03();        f();        var x = f();       console.log(x);  //40          var g = fun03();        var y = g();        console.log(y); //20 復制代碼

為什么第一句打印的是40,第二句打印20呢,目測看到的原因是第一句打印  f()執行了兩次(但是函數一旦執行后那么里面的局部變量就會銷毀,但是為什么沒有被銷毀呢,這就是閉包的作用)

因為閉包可以使變量不被釋放,始終存在內存中,因為fun03是其中匿名函數(閉包)的父函數,而匿名函數又被賦值給了一個全局變量,所以f一直在內存中,而f又依賴于fun03所以這就導致其中的a變量一直存在,當運行兩次后a進行了累加計算

結合垃圾回收機制來理解作用域鏈


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久免费精品 | 国产免费观看一区二区三区 | 8x成人在线电影 | hdhdhdhd19日本人 | 欧美日本色 | 九九黄色 | 欧美成人精品不卡视频在线观看 | 国产精品久久久久网站 | 黄网站在线播放视频免费观看 | 狠狠干b| 一区在线视频观看 | 8x成人在线电影 | 日本高清黄色片 | 国产一区二区三区四区精 | 日本精品久久久一区二区三区 | 一区二区三区小视频 | 亚洲精品成人久久 | 在线观看网址av | 精品久久久久久久久久久久包黑料 | 午夜精品视频免费观看 | 小视频免费在线观看 | 亚洲成人在线视频网站 | 成人免费观看av | 欧美色性 | 日本精品视频一区二区三区四区 | 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品久久国产精麻豆96堂 | 草人人 | 大片毛片| 免看黄大片aa | 成人免费一区二区三区在线观看 | 成人黄视频在线观看 | av7777777| 日本一区二区久久 | 91成人久久 | 99精品欧美一区二区 | 免费毛片视频 | 天天操天天碰 | 久久久久国产成人精品亚洲午夜 | 国产亚洲精品美女久久久 | 一级黄色欧美 |