作用域之全域性變數和區域性變數

2021-09-12 02:47:57 字數 1536 閱讀 7445

一句話概括作用域:變數和函式的可訪問範圍

作用域分為三種:全域性作用域(全域性變數),區域性作用域(區域性變數),塊級作用域(es6新增)

什麼是全域性變數(在函式外定義的變數)

什麼是區域性變數:區域性變數也叫函式變數(在函式內定義的變數);

作用域不同:全域性變數的作用域為整個程式,而區域性變數的作用域為當前函式

記憶體儲存方式不同:全域性變數是程式是整個程式都需要用到的,單獨分出一塊儲存區儲存,該儲存區儲存的資料不清空,區域性變數是函式退出時自動清空的,所以放在棧裡做臨時儲存

生命週期不同:全域性變數隨著程式結束而銷毀,區域性變數隨著函式退出而銷毀

全域性變數:能不用全域性變數就不用,why?

主要原因就是不利於模組化因為全域性變數可以被每個函式呼叫,可能不經意的修改就影響到其他函式,

可復用開發麻煩。

除錯起來也麻煩,畢竟全域性變數一直在變

var num=1;

if(1==1)

console.log(num)//2

如果非要用到全域性變數,解決方法:

1.全域性變數前面都加上 g_;

2.全域性變數只有乙個,要用就只用定義好的這個

(function ()

global.qq='1278125909';

global.fn=function()

}).call(this)

console.log(global.qq)//1278125909

console.log(global.fn())//31

區域性變數是無法被 區域性變數外的函式所呼叫的,但是全域性變數可以被區域性函式所呼叫;

var num='99';

function fn1()

fn1()

console.log(str)// str is not defined

1 .在函式體內,區域性變數的優先順序高於同名的全域性變數,如果重名,全域性變數會被覆蓋

var scope="global";

function fn()

console.log((fn()))//fnnc

console.log(scope)//global 此處之所以值為global,是因為這時

//全域性變數是無法獲取到fn裡的定義的scope,所以值才是global

2 .函式引數也是區域性變數,只在函式體內有定義

function fn(p1,p2)

fn(99,2);

console.log(p1)//p1 is not defined

ps:在js裡if語句不是乙個作用域;

因為根據區域性變數無法被區域性函式外所呼叫的原則,str應該為not defined,但是結果卻是cx;

var num=1;

if(num==1)

console.log(str)//cx

19 8 9 全域性變數和區域性變數的作用域

1.首先在函式內部宣告的就是區域性變數,只能夠在函式內部或者 塊內使用。2.全域性變數,在所有函式的外部定義的變數,通常是在程式的頭部定義,全域性變數是在程式的整個生命週期內都是有效的。可以被任何函式訪問,這點很重要,也就是說一旦宣告就可以在整個程式中使用。3.區域性變數和全域性變數名稱可以相同,但...

全域性變數和區域性變數

全域性變數 可以被不同的函式 類或檔案呼叫的變數,在函式外定義。區域性變數 只能在函式內使用,定義在函式內。區域性變數的使用 class myclass def myfun num 12 print myfun num num 正確 def myfun2 num num 1 print mufun ...

全域性變數和區域性變數

區域性變數 在方法中開闢的變數,只在方法中有效 區域性變數在定義時不會初始化,要顯式的給它乙個值 如未給它乙個初始值,雖然編譯的時候會通過,但是執行的時候會產生為初始化錯誤!方法呼叫 執行完,區域性變數便會自動釋放。在方法內的語句塊中建立的變數在編譯時假如未初始,如若使用,也會報未初始化錯誤!呼叫的...