国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

js中作用域的實(shí)例解析

2024-05-06 15:09:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

首先,要了解一下作用域的概念:作用--讀、寫(xiě),域--范圍或空間。作用域:可用來(lái)進(jìn)行讀、寫(xiě)操作的范圍或者空間。

其次,再來(lái)看看瀏覽器讀取js文件(script標(biāo)簽內(nèi)的內(nèi)容)的步驟。

第一步:預(yù)解析-----根據(jù)var function 把可能用到的參數(shù)或函數(shù)找出來(lái),放在內(nèi)存里(這相當(dāng)于放到倉(cāng)庫(kù)里面)

例1:

<script>alert(a)var a=1function fn1(){alert(2)}</script>

根據(jù)var和function可以找到:a  fn1

預(yù)解析的過(guò)程中會(huì)自動(dòng)給變量賦值undefined,即:a=undefined;而函數(shù)的值就函數(shù)本身,即:fn1=function fn1(){alert(2)}

所以預(yù)解析后:a = undefined, fn1=function fn1(){alert(2)}

如果函數(shù)和變量重名,那么只保留有值的那個(gè)。

例2:

<script>alert(a)var a=1function a(){alert(2)}var a=10</script>

根據(jù)var和function可以找到:a  a  a

預(yù)解析的過(guò)程中:a=undefined, a=function a(){alert(2)}, a=undefined

預(yù)解析之后就只有 a=function a(){alert(2)}

例3:

如果例2中var a=10后面還有一個(gè)函數(shù)function a(){alert(4)}

那么預(yù)解析之后的結(jié)果就變成了:a=function a(){alert(4)}。因?yàn)楹笠粋€(gè)有值的會(huì)覆蓋前一個(gè)。

第二步:就是從上而下逐行解讀代碼了

例4:

首先我們知道下面的代碼預(yù)解析的結(jié)果是:a=function a(){alert(4)}

<script>alert(a)                //讀這一行的時(shí)候a=function a(){alert(4)},所以打印出來(lái)的是function a(){alert(4)}var a=1                //讀這一的行的是后,是給a重新賦值了,所以a=1alert(a)                //讀這一行的時(shí)候a=1,所以打印出來(lái)的是1function a(){alert(2)}     //讀這一行的時(shí)候,沒(méi)有對(duì)a重新賦值,也不會(huì)打印任何東西,因?yàn)楹瘮?shù)沒(méi)被調(diào)用。alert(a)               //讀這一行的時(shí)候a=1,所以打印出來(lái)的是1var a=10             //讀這一的行的是后,是給a重新賦值了,所以a=10alert(a)              //讀這一行的時(shí)候a=10,所以打印出來(lái)的是10function a(){alert(4)}    //讀這一行的時(shí)候,沒(méi)有對(duì)a重新賦值,也不會(huì)打印任何東西,因?yàn)楹瘮?shù)沒(méi)被調(diào)用。alert(a)              //讀這一行的時(shí)候a=10,所以打印出來(lái)的是10</script>

---------------------上面的內(nèi)容,幫助去理解預(yù)解析的概念,還沒(méi)有用到“域”。而對(duì)于預(yù)解析來(lái)說(shuō),只要遇到一個(gè)“域”,就會(huì)在這個(gè)“域”內(nèi)發(fā)生預(yù)解析------------------------

例5:

以下代碼預(yù)解析:a=undefined,fn1=funciton fn1(){alert(a)var a=2;},然后開(kāi)始執(zhí)行代碼

<script>var a=1     //讀到這一行的時(shí),給a賦值,a=1funciton fn1(){alert(a);var a=2;} //讀到這一行的時(shí),什么都沒(méi)發(fā)生fn1();//讀到這一行時(shí),函數(shù)被調(diào)用。也分為兩步       //1、函數(shù)被調(diào)用首先進(jìn)行這個(gè)函數(shù)域的預(yù)解析,并把自己的預(yù)解析放在自己的倉(cāng)庫(kù)里面。       //2、逐行解讀代碼:當(dāng)讀到alert(a)時(shí),函數(shù)域的預(yù)解析結(jié)果為a=undefined,所以打印出undefined。讀到var a=2時(shí),將自己預(yù)解析的結(jié)果變?yōu)閍=2.alert(a);//讀到這一行的時(shí)候a=1,打印出1</script>            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 博白县| 油尖旺区| 革吉县| 正镶白旗| 龙南县| 温州市| 施秉县| 英德市| 唐山市| 聊城市| 长寿区| 龙陵县| 龙江县| 霍林郭勒市| 宿迁市| 三江| 淳化县| 清镇市| 西峡县| 昌图县| 新宾| 青州市| 沛县| 和平县| 台州市| 上林县| 江华| 宁夏| 景宁| 桃江县| 高陵县| 巴彦淖尔市| 九台市| 开鲁县| 南陵县| 乐东| 望都县| 鄱阳县| 庐江县| 冀州市| 洪泽县|