修改位置的軟件 關(guān)于JS函數(shù)里,修改,全局變量,的問(wèn)題?
關(guān)于JS函數(shù)里,修改,全局變量,的問(wèn)題?JScript code變量分為局部變量和全局變量,局部變量也稱(chēng)為內(nèi)部變量。由對(duì)象或函數(shù)創(chuàng)建的變量通常是局部變量,只能在內(nèi)部引用,而不能由其他對(duì)象或函數(shù)引用。全
關(guān)于JS函數(shù)里,修改,全局變量,的問(wèn)題?
JScript code
變量分為局部變量和全局變量,局部變量也稱(chēng)為內(nèi)部變量。由對(duì)象或函數(shù)創(chuàng)建的變量通常是局部變量,只能在內(nèi)部引用,而不能由其他對(duì)象或函數(shù)引用。
全局變量可以由對(duì)象函數(shù)或此程序中的任何位置創(chuàng)建。全局變量可由該程序中的所有對(duì)象或函數(shù)引用。當(dāng)一個(gè)局部變量被其他對(duì)象引用時(shí),它將是一個(gè)空值。全局變量并非如此。
多個(gè)線程可以讀一個(gè)變量,只有一個(gè)線程可以對(duì)這個(gè)變量進(jìn)行寫(xiě),到底要不要加鎖?
下面簡(jiǎn)要說(shuō)明以下原因:
鎖定是因?yàn)椴僮鞑皇窃拥?。讓我們用操作一?lái)解釋它??聪旅鎯蓚€(gè)圖。
我這個(gè)操作需要
看上面的第二個(gè)圖,你能很清楚地理解這個(gè)過(guò)程嗎?
鎖定是為了確保上述三個(gè)步驟是原子操作。
回到問(wèn)題上來(lái),只有一個(gè)線程要寫(xiě),沒(méi)有競(jìng)爭(zhēng),所以不需要鎖定。
但是,如果你看第一張圖片,因?yàn)橹鲀?nèi)存和本地內(nèi)存的存在
在一個(gè)線程寫(xiě)入后,其他線程無(wú)法立即看到它。這就是可見(jiàn)性問(wèn)題。
添加volatile關(guān)鍵字后,它將在操作后強(qiáng)制工作內(nèi)存和主內(nèi)存同步,以確保其他線程可以立即看到它。