1. 程式人生 > >JS中如何把區域性變數變成全域性變數

JS中如何把區域性變數變成全域性變數

1、先明白自呼叫函式的概念(是一次性的函式,在宣告的同時,直接呼叫了)。

那麼有一個問題,自呼叫函式是怎麼推出來的呢?下圖:f1是函式名,函式名中存的是函式的程式碼,替代後可以去掉函式名f1。

  

而且在頁面載入後,自呼叫函式的程式碼就執行完了。下圖執行結果報錯,因為num是區域性變數,且在函式外部沒有宣告和賦值。還要注意形參和實參的位置。

2、瀏覽器中的頂級物件是window,引用window物件的屬性和方法時,可以省略window(console.log(num);)。window物件既是ECMAScript規範中的Global物件,也是BOM中的頂級物件。

下圖通過給window物件的屬性賦值,然後在外面去訪問屬性的值。注:win.num=num; 

前一個是屬性。

記憶體圖如下:

至此,最初的問題就已經解決了,如何把區域性變數變成全域性變數?我們只要把區域性變數的值給window下的屬性就可以了。

3、下面進行具體的應用:通過自呼叫函式產生一個隨機數物件,在自呼叫函式外面,呼叫該隨機數物件方法產生隨機數。產生隨機數0-4之間的數。

  <script>

    (function (window) {
      //產生隨機數的建構函式
      function Random() {
      }
      //在原型物件中新增方法 
      Random.prototype.getRandom = function (min,max) {
        return Math.floor(Math.random()*(max-min)+min);//floor向下取整
      };
      //把Random物件暴露給頂級物件window--->外部可以直接使用這個物件
      window.random=Random;//將函式名字給了屬性Random
    })(window); 
    //例項化隨機數物件
    var rm=new window.random(); //window.可以省略  
    //呼叫方法產生隨機數
    console.log(rm.getRandom(0,5));
    // var num=rm.getRandom();
    // console.log(num);

  </script>