利用DMZ物件保護全域性變數

2022-06-05 03:33:12 字數 701 閱讀 9537

今天偶然看到this繫結有個比較例外的例子會直接忽略指定的繫結物件。

function

foo()

var a=2;

//傳入null

2

非嚴格模式下foo函式中的this被預設繫結到全域性物件(只要函式體(不是函式呼叫位置)處於嚴格模式下,會繫結到undefined),自然輸出就是2。

如果此時全域性a被篡改就麻煩了,例如:

function

foo()

var a=2;

//傳入null

);console.log(a);

//linwei

此時全域性a就被篡改了,可能會引發bug。

此時可以用乙個dmz(demilitarized zone,非軍事區)物件來保護全域性變數,這個dmz物件本質上是乙個「裸」物件(詳見賀老的文章

function

foo()

//建立dmz物件

var empty=object.create(null

);var a=2;

console.log(a);

//2,不會被篡改成"linwei"

這樣就達到保護全域性變數a的目的。

如果函式並不關心this值,可以傳入乙個比null更安全的佔位值,dmz物件將是乙個更安全的選擇。

VxWorks全域性變數的保護

vxworks全域性變數的保護 vxworks 作業系統是乙個應用比較多的實時多工作業系統。它提供並支援多任務排程機制,使用者可以將自己對事件的控制通過不同任務的協調而完成。各個任務之間通過全域性變數 訊號量 管道等方式進行資訊交換。wind ml 是vxworks 上的乙個二維圖形使用者介面,當多...

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...