JS中如何把區域性變數變成全域性變數
阿新 • • 發佈:2019-01-28
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>