亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js中作用域的實例解析

發布時間:2020-09-17 18:40:20 來源:腳本之家 閱讀:134 作者:抵攏倒拐Web 欄目:web開發

首先,要了解一下作用域的概念:作用--讀、寫,域--范圍或空間。作用域:可用來進行讀、寫操作的范圍或者空間。

其次,再來看看瀏覽器讀取js文件(script標簽內的內容)的步驟。

第一步:預解析-----根據var function 把可能用到的參數或函數找出來,放在內存里(這相當于放到倉庫里面)

例1:

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

根據var和function可以找到:a  fn1

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

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

如果函數和變量重名,那么只保留有值的那個。

例2:

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

根據var和function可以找到:a  a  a

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

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

例3:

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

那么預解析之后的結果就變成了:a=function a(){alert(4)}。因為后一個有值的會覆蓋前一個。

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

例4:

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

<script>
alert(a)                //讀這一行的時候a=function a(){alert(4)},所以打印出來的是function a(){alert(4)}
var a=1                //讀這一的行的是后,是給a重新賦值了,所以a=1
alert(a)                //讀這一行的時候a=1,所以打印出來的是1
function a(){alert(2)}     //讀這一行的時候,沒有對a重新賦值,也不會打印任何東西,因為函數沒被調用。
alert(a)               //讀這一行的時候a=1,所以打印出來的是1
var a=10             //讀這一的行的是后,是給a重新賦值了,所以a=10
alert(a)              //讀這一行的時候a=10,所以打印出來的是10
function a(){alert(4)}    //讀這一行的時候,沒有對a重新賦值,也不會打印任何東西,因為函數沒被調用。
alert(a)              //讀這一行的時候a=10,所以打印出來的是10
</script>

---------------------上面的內容,幫助去理解預解析的概念,還沒有用到“域”。而對于預解析來說,只要遇到一個“域”,就會在這個“域”內發生預解析------------------------

例5:

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

<script>
var a=1     //讀到這一行的時,給a賦值,a=1
funciton fn1(){alert(a);var a=2;} //讀到這一行的時,什么都沒發生
fn1();//讀到這一行時,函數被調用。也分為兩步
       //1、函數被調用首先進行這個函數域的預解析,并把自己的預解析放在自己的倉庫里面。
       //2、逐行解讀代碼:當讀到alert(a)時,函數域的預解析結果為a=undefined,所以打印出undefined。讀到var a=2時,將自己預解析的結果變為a=2.
alert(a);//讀到這一行的時候a=1,打印出1
</script>

例6:在例5的基礎上進行一個小改動,把var a=2改為a=2,則輸出的結果又不同。

<script>
var a=1  //a=1
funciton fn1(){alert(a); a=2;}
fn1();  //在函數調用的時候。因為函數內部沒有“var”,所以預解析沒有結果。當執行函數中的alert(a),就會到函數外(父域)找a,此時a=1,所以打印出1
         //函數a=2,是給全局變量賦值,所以a=2
alert(a);//因為a=2,所以打印出2
</script>

例7:在例6基礎上,改動一下

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

打印出的結果會是:undefined,1。大家自己思考吧。提示:funciton fn1(a)相當于funciton fn1(var a)

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱芜市| 阜新市| 金坛市| 清远市| 泸西县| 水富县| 武山县| 福海县| 阜新| 武功县| 永宁县| 鲁甸县| 淮滨县| 电白县| 温州市| 华阴市| 黎川县| 临江市| 清涧县| 如皋市| 肇庆市| 隆德县| 五常市| 夹江县| 东安县| 原平市| 龙泉市| 郓城县| 沙湾县| 台中市| 固安县| 偏关县| 阿勒泰市| 四子王旗| 苏尼特右旗| 綦江县| 江源县| 太原市| 平谷区| 如皋市| 东光县|