最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談js的解析順序 作用域 嚴(yán)格模式

 更新時(shí)間:2017年10月23日 08:31:34   作者:一步一步向上爬  
下面小編就為大家?guī)硪黄獪\談js的解析順序 作用域 嚴(yán)格模式。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、javascript的解析順序

我們大家所理解的代碼的執(zhí)行順序都是從上到下的,但是實(shí)際上確不是這樣的。我們看一下下面的代碼。

alert(a);
var a = 1;

如果執(zhí)行順序是從上到下的,在上面彈出一個(gè)a,瀏覽器會認(rèn)為從上到下執(zhí)行的,那么當(dāng)它alert(a)的時(shí)候,他就會發(fā)現(xiàn)沒有這個(gè)東西,那么他就會報(bào)錯(cuò),但是實(shí)際上他彈出來的結(jié)果是undefined。返回值是undefined說明a沒有被定義也就是沒有賦值。下面我來講解一下javascript的解析順序。

1.ES5中有聲明意義的關(guān)鍵字

var 會存在變量提升

function也有聲明變量的的作用。

2.解析順序

1.找聲明 var、function 聲明:只是聲明變量,而不包括賦值。

2. 執(zhí)行

注意:以上兩步 都遵循從上至下,執(zhí)行的時(shí)候遇到等號,先看等號的右邊。

注意:當(dāng)function聲明的變量和var聲明的變量重名時(shí),function的變量權(quán)重會比var聲明的要高。

下面多來幾個(gè)例子解析一下就清楚許多了,但是看例子之前要知道一下什么叫作用域。

二、作用域

作用域就是:起作用的范圍分為下面兩種

1.全局作用域

2.函數(shù)作用域

他們兩個(gè)的區(qū)別看下面的例子仔細(xì)分析。

三、看幾個(gè)例子解析一下執(zhí)行順序的步驟

1. 第一個(gè)例子:

var x = 5;
 a();
 function a(){
  alert(x);
  var x = 10;
 }
alert(x);

解析過程

1,.尋找聲明 (看全局作用域)

var x;

function a(){}

2.執(zhí)行

x = 5;

a() ------------->執(zhí)行到這個(gè)函數(shù)的過程中在重新進(jìn)行以上兩步

1,尋找聲明 var x;(函數(shù)作用域)

2. 執(zhí)行

alert(x); 這個(gè)x在函數(shù)作用域中存在,并且還沒有執(zhí)行到賦值的那一步,那么彈出的東西就是undefined;

x = 10;

alert(x) 這里彈窗是全局變量 5;

所以瀏覽器彈窗的內(nèi)容是 undefined 5

2. 第二個(gè)例子

 a()
 function a(){
  alert(x);
  var x = 10;
 }
alert(x);

解析過程 按照上面的例子一樣分析

1. 尋找聲明

 function a(){}

2.執(zhí)行

 a()------------------------->函數(shù)

1.尋找聲明

var x;

2.執(zhí)行

alert(x) 彈出未定義

x = 10;

alert(x); 這里的x會從全局中尋找x,但是發(fā)現(xiàn)并沒有x,所 以瀏覽器會 報(bào)錯(cuò) x is not defined x沒有被定義

所以瀏覽器的彈出的內(nèi)容是 undefined 報(bào)錯(cuò)

 

我相信看了這兩個(gè)例子的人都對這個(gè)解析過程都有了清除的了解,如果還是不太了解,建議重新看一次。

下面介紹幾個(gè)需要注意的地方, 直接上例子

3. 第三個(gè)例子

前面講到了當(dāng)function聲明的變量和var聲明的變量重名時(shí),function的變量權(quán)重會比var聲明的要高。來一個(gè)例子證明一下

alert(a)

function a() {
 alert("函數(shù)")
}

var a = 1; 
alert(a)

解析過程

1.尋找聲明

 function a(){}

 var a;

2. 執(zhí)行

alert(a) 前面說到了function的聲明比var聲明的權(quán)重高,所有執(zhí)行這個(gè)的時(shí)候他會彈出這個(gè) 函數(shù)塊(函數(shù)體)

a = 1;

alert(a); 這里彈出的就是 1 了

所以最后的結(jié)果就是 函數(shù)塊 1;

4.第四個(gè)例子

子作用域可以向父級作用域找變量,直到全局作用域?yàn)橹?,反之不行?如果子作用域有同樣的變量,那么他就會使用自己的,不會去找爸爸要。

var a = 5;

function fn() {
 alert(a)
}

fn()

解析過程

1.尋找聲明

var a;

function fn(){}

2.執(zhí)行

a = 5;

fn()--------------------------------------> 函數(shù)

1.找聲明

2.執(zhí)行

alert(a); 他這里沒有a 所以去找爸爸要。 a = 5; 所以彈窗是 5

所以最后結(jié)果為 彈窗5

下面看一下爸爸會不會去找兒子要東西

function fn(){
  var b = 5; 
  return b;  
}
fn();
alert(b);

1.尋找聲明

function fn(){}

2. 執(zhí)行

fn()----------------------------------------> 函數(shù)

1.尋找聲明

1.var b;

2.執(zhí)行

return b;

alert(b); //我們看一下返回值是多少 b is not defined 他說b沒有被定義,說明父作用域不可以向自作用域去尋找變量。

5. 第五個(gè)例子

當(dāng)一個(gè)變量無中生有時(shí),不管從哪個(gè)作用域出來的,統(tǒng)統(tǒng)歸到window下,下面看兩個(gè)例子

fn();
 alert(a);
 var a = 0;
 alert(a);
 function fn(){
  var a = 1;
 }

這一個(gè)例子應(yīng)該可以自己分析了 最后的結(jié)果是 undefined 0

我們再來看一下下面這個(gè)你會很吃驚

 fn()
 alert(a)
 var a = 0;
 alert(a);
 function fn(){
   a = 1;
 } 

明明都一樣,我吃驚什么 返回值不是還是 undefined 和 0 嗎

但是你有沒有發(fā)現(xiàn)倒數(shù)第二行 上面的聲明了 下面的沒有聲明,來解析一波

1.尋找變量

var a;

function fn(){}

2.fn()---------------------------->函數(shù)

a = 1; 這個(gè)時(shí)候就說到了那一點(diǎn),無中生有的變量,統(tǒng)統(tǒng)歸到window下面

所以下面的執(zhí)行過程

alert(a) 這里的彈窗就是 1 了

a = 0;

 alert(a) 彈出 0

所以最后的結(jié)果是 1 0

四、嚴(yán)格模式

嚴(yán)格模式下的代碼執(zhí)行時(shí),非常嚴(yán)格

變量不允許無中生有

意義:規(guī)范代碼開發(fā)的流暢,邏輯

"use strict"
a = 1;
alert(a);

當(dāng)我們寫后面兩句代碼的時(shí)候不會報(bào)錯(cuò)和出現(xiàn)問題,但是當(dāng)我們加上第一句代碼的時(shí)候,我們在這樣寫的時(shí)候就會報(bào)錯(cuò)了。所以我們還是按照規(guī)范的標(biāo)準(zhǔn)來,提高自己的能力

五、可能好多人做了上面的例子感覺不太過癮,下面我再給出幾個(gè)例子,可以自己去分析分析,我會在最后面給出答案。

1. 第一個(gè)例子  // 10 報(bào)錯(cuò)

var a = 10;
alert(a);
a()
function a(){
 alert(20);
}

2.第二個(gè)例子 undefined 1 0

var a = 0;
 function fn(){
  alert(a);
  var a = 1;
  alert(a);
 }
 fn();
 alert(a);

3.第三個(gè)例子 當(dāng)同樣的聲明同樣的名字重復(fù)時(shí),后面寫的會覆蓋前面寫的 //2 1 1 3

a()
 var a = function(){
  alert(1)
 }
 a();
 function a(){
  alert(2);
 }
 a();
 var a = function(){
  alert(3);
 }
 a()

如果你看到我的文章可以收獲一些知識,那么我會非常高興的。

以上這篇淺談js的解析順序 作用域 嚴(yán)格模式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS動態(tài)加載腳本并執(zhí)行回調(diào)操作

    JS動態(tài)加載腳本并執(zhí)行回調(diào)操作

    這篇文章主要為大家詳細(xì)介紹了JS動態(tài)加載腳本并下載完成后執(zhí)行回調(diào)操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • js 實(shí)現(xiàn)碰撞檢測的示例

    js 實(shí)現(xiàn)碰撞檢測的示例

    這篇文章主要介紹了js 實(shí)現(xiàn)碰撞檢測的示例,幫助大家更好的制作js特效,美化自身網(wǎng)頁,感興趣的朋友可以了解下
    2020-10-10
  • JavaScript實(shí)現(xiàn)網(wǎng)頁加載進(jìn)度條代碼超簡單

    JavaScript實(shí)現(xiàn)網(wǎng)頁加載進(jìn)度條代碼超簡單

    網(wǎng)頁進(jìn)度條能夠更好的反應(yīng)當(dāng)前網(wǎng)頁的加載進(jìn)度情況,loading進(jìn)度條可用動畫的形式從開始0%到100%完成網(wǎng)頁加載這一過程。代碼簡單易懂,效果非常好,需要的一起學(xué)習(xí)學(xué)習(xí)吧
    2015-09-09
  • javascript簡單實(shí)現(xiàn)表格行間隔顯示顏色并高亮顯示

    javascript簡單實(shí)現(xiàn)表格行間隔顯示顏色并高亮顯示

    表格行間隔顯示顏色并實(shí)現(xiàn)高亮顯示,這種效果大家都有見到過吧,下面就為大家詳細(xì)介紹下,需要的朋友可不要錯(cuò)過
    2013-11-11
  • js Map List 遍歷使用示例

    js Map List 遍歷使用示例

    在知道的key的情況下遍歷map自然就跟數(shù)組一樣的訪問羅,這里就不說了,示例如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • js 博客內(nèi)容進(jìn)度插件詳解

    js 博客內(nèi)容進(jìn)度插件詳解

    本篇文章主要介紹了博客內(nèi)容進(jìn)度插件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • JS實(shí)現(xiàn)彈幕小案例

    JS實(shí)現(xiàn)彈幕小案例

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)彈幕小案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 基于JS判斷對象是否是數(shù)組

    基于JS判斷對象是否是數(shù)組

    這篇文章主要介紹了基于JS判斷對象是否是數(shù)組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 微信小程序template模版的使用方法

    微信小程序template模版的使用方法

    這篇文章主要給大家介紹了關(guān)于微信小程序template模版的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Javascript 鍵盤keyCode鍵碼值表

    Javascript 鍵盤keyCode鍵碼值表

    Javascript 鍵盤keyCode鍵碼值表,需要的朋友可以保存一份。
    2009-12-12

最新評論

沭阳县| 琼中| 金昌市| 德令哈市| 武义县| 张家界市| 金门县| 平昌县| 平塘县| 农安县| 额尔古纳市| 凤凰县| 浦城县| 邯郸县| 娱乐| 闸北区| 宣化县| 遵义县| 阜南县| 民和| 含山县| 略阳县| 宜昌市| 三门峡市| 沙河市| 惠安县| 雅江县| 舞阳县| 彭山县| 西藏| 夏邑县| 阳西县| 泾川县| 江华| 陈巴尔虎旗| 三亚市| 肇庆市| 开平市| 长泰县| 焦作市| 来宾市|