在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

JavaScript預解釋是什么?JavaScript預解釋的解析(附代碼)

JavaScript預解釋是什么?JavaScript預解釋的解析(附代碼)

更新時間:2025-12-08 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。
本篇文章給大家帶來的內容是關于JavaScript預解釋是什么?JavaScript預解釋的解析(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

JavaScript是一門解釋型的語言 , 想要運行JavaScript代碼需要兩個階段

  • 編譯階段: 編譯階段就是我們常說的JavaScript預解釋(預處理)階段,在這個階段JavaScript解釋器將完成把JavaScript腳本代碼轉換到字節碼

  • 執行階段: 在編譯階段JavaScript解釋器借助執行環境把字節碼生成機械碼,并從上到下按順序執行

本文就重點介紹預解釋,框架圖如下:

360截圖20181116145145033.jpg

一、什么是預解釋

預解釋:JavaScript代碼執行之前,瀏覽器首先會默認的把所有帶var和function的進行提前的聲明或者定義

1.理解聲明和定義

聲明(declare):如var num;=>告訴瀏覽器在全局作用域中有一個num的變量了;如果一個變量只是聲明了但是沒有賦值,默認的值是undefined

定義(defined):如num=12;=>給我們的變量進行賦值。

2.對于帶var和function關鍵字的在預解釋的時候操作不一樣的

var =>在預解釋的時候只是提前的聲明

function =>在預解釋的時候提前的聲明+定義都完成了

3.預解釋只發生在當前的作用域下。

例如:開始只對window下的進行預解釋,只有函數執行的時候才會對函數中的進行預解釋

二、作用域鏈

1.如何區分私有變量和全局變量?

1)在全局作用域下聲明(預解釋的時候)的變量是全局變量

2)只有函數執行會產生私有的作用域,比如for(){}、if(){}和switch(){}都不會產生私有作用域

3)在"私有作用域中聲明的變量(var 聲明)"和"函數的形參"都是私有的變量。在私有作用域中,代碼執行的時保遇到了一個變量,首先我們需要確定它是否為私有的變量,如果是私有的變量,那么和外面的沒有在何的關系;如果不是私有的,則往當前作用域的上級作用域進行查找,如果上級作用域也沒有則繼續查找,一直找到window為止,這就是作用域鏈。

我們舉個例子來區別私有變量和全局變量:

//=>變量提升:var a;var b;var c;test=AAAFFF111;
var a=10,b=11,c=12;
function test(a){
//=>私有作用域:a=10 var b;
a=1;//=>私有變量a=1
var b=2;//=>私有變量b=2
c=3;//=>全局變量c=3
}
test(10);
console.log(a);//10
console.log(b);//11
console.log(c);//3

判斷是否是私有變量一個標準就是是否是在函數中var聲明的變量和函數的形參都是私有的變量。本道題目在test函數中a是形參和var b定義的變量b都是私有變量。

2.函數傳參

這是因為當函數執行的時候,首先會形成一個新的私有的作用域,然后按照如下的步驟執行:

1)如果有形參,先給形參賦值

2)進行私有作用域中的預解釋

3)私有作用域中的代碼從上到下執行

我們來看一道例題

var total=0;
function fn(num1,num2){
console.log(total);//->undefined 外面修改不了私有的
var total=num1 +num2;
console.log(total);//->300
}
fn(100,200);
console.log(total);//->0 私有的也修改不了外面的

3.JS中內存的分類

棧內存:用來提供一個供JS代碼執行的環境,即作用域(全局作用域/私有的作用域)
堆內存:用來存儲引用數據類型的值。對象存儲的是屬性名和屬性值,函數存儲的是代碼字符串。

三、全局作用域下帶var和不帶var的區別

我們先來看以下兩個例子:

//例題1
console.log(num);//->undefined
var num=12;
//例題2
console.log(num2);//->Uncaught ReferenceError:num2 is not defined 
num2=12;//不能預解釋

當你看到var num=12時,可能會認為只是個聲明。但JavaScript實際上會將其看成兩條聲明語句:var num;和 num=12;第一個定義聲明是在預解釋階段進行的。第二個賦值聲明會被留在原地等待執行階段。num2=12 相當于給window增加了一個叫做num2的屬性名,屬性值是12;而var num=12 首先它相當于給全局作用域增加了一個全局變量num,它也相當于給window增加了一個屬性名num2,屬性值是12。兩者最大區別:帶var的可以進行預解釋,所以在賦值的前面執行不會報錯;不帶var的是不能進行預解釋的,在前面執行會報錯;

接下來我們舉例說明:

//例題1
var total=0;
function fn(){
console.log(total);//undefined
var total=100;
}
fn();
console.log(total);//0
//例題2
var total=0;
function fn(){
console.log(total);//0
total=100;
}
fn();
console.log(total);//100

例題1中帶var變量在私有作用域中可以預解釋,所以第一個console打出來的值為undefined。私有作用域中出現的一個變量不是私有的,則往上級作用域進行查找,上級沒有則繼續向上查找,一直找到window為止,例題2中不帶var變量不是私有的,所以往上級找

四、預解釋五大毫無節操的表現

1.預解釋的時候不管你的條件是否成立,都要把帶var的進行提前的聲明。

請看下面這道例題:

if(!("num" in  window)){
var num=12;//這句話會被提到大括號之外的全局作用域:var num;->window.num; 
}
console.log(num);//undefined

2.預解釋的時候只預解釋”=”左邊的,右邊的值,不參與預解釋

請看下面這道例題:

fn();//報錯
var fn=function (){  //window下的預解釋:var fn;
console.log("ok");
};

3.自執行函數:定義和執行一起完成了。

自執行函數定義的那個function在全局作用域下不進行預解釋,當代碼執行到這個位置的時候定義和執行一起完成了。常見有以下幾種形式:

(function(num){})(10);
~function(num){}(10);
+function(num){}(10);
-function(num){}(10);
!function(num){}(10);

4.函數體中return下面的代碼雖然不再執行了,但是需要進行預解釋;return后面跟著的都是我們返回的值,所以不進行預解釋;

function fn(){
//預解釋:var num;
console.log(num);//->undefined
return function(){};
var num=100;
}

5.函數聲明和變量聲明都會被提升。但是一個值得注意的細節(這個細節可以出現在有多個“重復”聲明的代碼中)是函數會首先被提升,然后才是變量。在預解釋的時候,如果名字已經聲明過了,不需要從新的聲明,但是需要重新的賦值;

我們先來看下兩個簡單的例子:

//例題1
 function a() {}
  var a
  console.log(typeof a)//'function'
//例題2
  var c = 1
  function c(c) {
    console.log(c)
    var c = 3
  }
  c(2)//Uncaught TypeError: c is not a function

當遇到存在函數聲明和變量聲明都會被提升的情況,函數聲明優先級比較高,最后變量聲明會被函數聲明所覆蓋,但是可以重新賦值,所以上個例子可以等價為

 function c(c) {
  console.log(c)
    var c = 3
  }
 c = 1
 c(2)

接下來我們看下兩道比較復雜的題目:

//例題3
fn();
function fn(){console.log(1);};
fn();
var fn=10;
fn();
function fn(){console.log(2);};
fn();

1.一開始預解釋,函數聲明和賦值一起來,fn 就是function fn(){console.log(1);};遇到var fn=10;不會重新再聲明,但是遇到function fn(){console.log(2);}就會從重新賦值,所以一開始fn()的值就是2

2.再執行fn();值不變還是2

3.fn重新賦值為10,所以運行fn()時報錯,接下去的語句就沒再執行。

//例題4
alert(a);
a();
var a=3;
function a(){
alert(10)
}
alert(a);
a=6;
a()

1.函數聲明優先于變量聲明,預解釋時候,函數聲明和賦值一起來,a就是function a(){alert(10)} ,后面遇到var a=3,也無需再重復聲明,所以先彈出function a(){alert(10)}

2.a(),執行函數,然后彈出10

3.接著執行了var a=3; 所以alert(a)就是顯示3

4.由于a不是一個函數了,所以往下在執行到a()的時候, 報錯。

以上就是JavaScript預解釋是什么?JavaScript預解釋的解析(附代碼)的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • av一区二区三区免费观看| 国产女女做受ⅹxx高潮| 精品久久久久久中文字幕2017| 日本丰满大乳奶| 久久久国产精华液999999| 久久久久久久片| 成人在线观看a| 99久久久无码国产精品6| 国产精品12345| 成人免费观看视频在线观看| 人妻av无码专区| 无码精品a∨在线观看中文| 人妻av中文系列| 日本a视频在线观看| 无码精品国产一区二区三区免费| 欧美性大战久久久久xxx| 黄色片一级视频| 国产精品久久久毛片| 永久免费黄色片| 欧美无砖专区免费| 日韩网址在线观看| 91 视频免费观看| 日韩亚洲欧美一区二区| 岳毛多又紧做起爽| 91女神在线观看| 欧美日韩中文字幕在线播放 | 久久无码高潮喷水| 黄色三级视频片| 欧美日韩在线免费观看视频| 91亚洲精品国产| 国产又黄又猛又粗| 99久久99久久精品| 亚洲免费一级视频| 国产美女主播在线| 中文字幕亚洲乱码| 人妻av中文系列| 日韩精品aaa| 国产精品-区区久久久狼| 亚洲免费av网| 无遮挡又爽又刺激的视频 | 第四色婷婷基地| 亚洲精品蜜桃久久久久久| 成年人视频在线免费| 日本大胆人体视频| 日韩欧美亚洲另类| 久久久久久久久久久免费视频| 免费成人深夜夜行网站视频| 国产成人精品无码播放| www.69av| 影音先锋男人的网站| www.夜夜爽| 日本va中文字幕| 一女被多男玩喷潮视频| 性生活免费观看视频| 国产欧美精品一二三| 亚洲精品怡红院| 三级4级全黄60分钟| 欧美一级片免费播放| 日韩精品免费一区| 一级日本黄色片| 中文字幕一区二区在线观看视频 | 日韩不卡视频一区二区| 午夜精品中文字幕| 亚洲免费一级视频| 国产91在线视频观看| 欧美伦理视频在线观看| www.国产福利| 天天操天天爱天天爽| 国产精品无码一本二本三本色| 黄色一级在线视频| 精品久久久久久久久久中文字幕| 久久久久久久久久伊人| 久久国产精品免费观看| 51xx午夜影福利| 久艹在线免费观看| 97久久国产亚洲精品超碰热| 久久久久久久香蕉| 天堂…中文在线最新版在线| 欧美在线观看成人| 99热这里只有精品在线播放| 亚洲国产精品三区| 欧洲xxxxx| 免费不卡av在线| 久久九九国产视频| 国内av一区二区| 高清无码视频直接看| 精品久久一二三| 黄色国产小视频| 波多野结衣在线免费观看| 久久免费视频2| 日本网站免费在线观看| www.天天射.com| 国产91在线亚洲| 国产精品欧美激情在线观看| 亚洲精品性视频| 人妻av中文系列| 欧美国产日韩在线视频| 性高湖久久久久久久久aaaaa| 免费无码国产v片在线观看| www.色欧美| 婷婷无套内射影院| 樱花草www在线| 日韩a在线播放| 精品一区二区三区毛片| 99蜜桃臀久久久欧美精品网站| 色网站在线视频| 可以免费观看av毛片| 国产片侵犯亲女视频播放| 成人中文字幕av| av在线观看地址| 国产精品久久成人免费观看| 激情综合网俺也去| 乱熟女高潮一区二区在线| 午夜宅男在线视频| 看av免费毛片手机播放| 91视频成人免费| 一级做a免费视频| 人人干人人视频| 国自产拍偷拍精品啪啪一区二区| 在线无限看免费粉色视频| 999在线免费视频| 成人三级视频在线播放| 屁屁影院ccyy国产第一页| 国产精品嫩草影视| 9l视频白拍9色9l视频| 成人在线观看a| 亚洲熟妇av一区二区三区漫画| 麻豆一区二区三区在线观看| 欧美午夜精品理论片| 亚洲精品成人在线播放| 亚洲欧美自拍另类日韩| 亚洲免费av一区二区三区| 日韩在线xxx| 日韩手机在线观看视频| www黄色在线| av免费网站观看| 天天干天天干天天干天天干天天干| 伊人成色综合网| 色婷婷综合久久久久中文字幕| 欧美日韩在线中文| 男人天堂成人在线| 国产精品久久a| 一级黄色片在线免费观看| 日本黄色福利视频| 国产卡一卡二在线| 成人av在线播放观看| 国产中文字幕二区| 国产无套粉嫩白浆内谢的出处| 亚洲少妇第一页| 日韩a一级欧美一级| 国产精品h视频| 日韩欧美一区二| 亚洲xxxx2d动漫1| 国产精品夜夜夜爽张柏芝| 成人免费看片'免费看| 免费在线激情视频| 亚洲精品永久视频| 污污污污污污www网站免费| 久久久噜噜噜www成人网| 久久久精品麻豆| 日本久久久网站| 能看的毛片网站| 在线观看18视频网站| 日韩精品 欧美| 亚洲欧美日韩一二三区| 国产伦精品一区二区三区四区视频_ | 一级特黄性色生活片| 免费观看中文字幕| 精品这里只有精品| 搡的我好爽在线观看免费视频| 99色这里只有精品| 日韩成人精品视频在线观看| 黄色一级在线视频| 交换做爰国语对白| av网站在线不卡| 国产二级片在线观看| 大桥未久一区二区三区| 日本激情视频在线| 欧美日韩在线视频一区二区三区| 伊人免费视频二| 无码日韩人妻精品久久蜜桃| 国产精品无码电影在线观看| 午夜精品久久久久久久99热影院| 日韩人妻无码精品久久久不卡| 天堂在线一区二区三区| 日韩精品一区二区三区不卡| 日本丰满少妇xxxx| 成人小视频在线观看免费| 国产精品久久久久久久99| 亚洲三级视频网站| 国产精品免费成人| 91成人在线观看喷潮教学| 97在线免费视频观看| 好色先生视频污| 国产精品亚洲天堂| 无套内谢丰满少妇中文字幕 | 在线观看18视频网站| 天堂在线精品视频| 182午夜视频| 国产女同无遮挡互慰高潮91|