JS之全域變數global

來源:互聯網
上載者:User

標籤:模組   沒有   elf   from   git   rom   common   支援   href   

全域變數

  • 瀏覽器裡面,頂層對象是window,但 Node 和 Web Worker 沒有window
  • 瀏覽器和 Web Worker 裡面,self也指向頂層對象,但是 Node 沒有self
  • Node 裡面,頂層對象是global,但其他環境都不支援。

同一段代碼為了能夠在各種環境,都能取到頂層對象,現在一般是使用this變數,但是有局限性。

  • 全域環境中,this會返回頂層對象。但是,Node 模組和 ES6 模組中,this返回的是當前模組。
  • 函數裡面的this,如果函數不是作為對象的方法運行,而是單純作為函數運行,this會指向頂層對象。但是,strict 模式下,這時this會返回undefined
  • 不管是strict 模式,還是普通模式,new Function(‘return this‘)(),總是會返回全域對象。但是,如果瀏覽器用了CSP(Content Security Policy,Alibaba Content Security Service政策),那麼evalnew Function這些方法都可能無法使用。

綜上所述,很難找到一種方法,可以在所有情況下,都取到頂層對象。下面是兩種勉強可以使用的方法。

// 方法一

( typeof  window !==  ‘undefined‘     ? window     : ( typeof  process ===  ‘object‘  &&        typeof  require ===  ‘function‘  &&        typeof  global ===  ‘object‘ )       ? global       this );  // 方法二 var  getGlobal =  function  () {    if  ( typeof  self !==  ‘undefined‘ ) {  return  self; }    if  ( typeof  window !==  ‘undefined‘ ) {  return  window; }    if  ( typeof  global !==  ‘undefined‘ ) {  return  global; }    throw  new  Error( ‘unable to locate global object‘ ); }; 現在有一個提案,在語言標準的層面,引入 global作為頂層對象。也就是說,在所有環境下, global都是存在的,都可以從它拿到頂層對象。

墊片庫system.global類比了這個提案,可以在所有環境拿到global

// CommonJS 的寫法

require( ‘system.global/shim‘ )();  // ES6 模組的寫法 import  shim from  ‘system.global/shim‘ ; shim();   上面代碼可以保證各種環境裡面, global對象都是存在的。 // CommonJS 的寫法 var  global = require( ‘system.global‘ )();  // ES6 模組的寫法 import  getGlobal from  ‘system.global‘ ; const global = getGlobal();  上面代碼將頂層對象放入變數 global

JS之全域變數global

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.