• <center id="sm46c"></center>
  • <dfn id="sm46c"></dfn>
  • <strike id="sm46c"></strike>
  • <cite id="sm46c"><source id="sm46c"></source></cite>
    • <strike id="sm46c"><source id="sm46c"></source></strike>
      <option id="sm46c"></option>
      国产精品天天看天天狠,女高中生强奷系列在线播放,久久无码免费的a毛片大全,国产日韩综合av在线,亚洲国产中文综合专区在,特殊重囗味sm在线观看无码,中文字幕一区二区三区四区在线,无码任你躁久久久久久老妇蜜桃

      JS學(xué)習(xí)筆記

      2021-3-19    前端達人

      JS學(xué)習(xí)筆記

      js和java的異同點

      變量聲明

      函數(shù)聲明

      js中的變量提升和函數(shù)提升

      為什么有變量提升

      總結(jié)

      js和java的異同點

      首先,js的語法和kottlin的語法有些相似。比如var,方法聲明用



        function 方法名稱 (參數(shù)名稱...){

        //方法內(nèi)部邏輯

        }



      還有變量類型聲明 :



      數(shù)據(jù)類型 : 變量名=值



      區(qū)別:一:js的數(shù)據(jù)類型和java類似。只不過js中的數(shù)據(jù)類型number將java中的int,double,float整合了。

      二:js中可以不用聲明變量類型。變量不聲明數(shù)據(jù)類型的話,那么他的類型取決于當(dāng)前的值是什么數(shù)據(jù)類型。舉例:



      var num=0;

      num-"lyyyyyyyyyyyyyy";

      num=[];

      num={};



      三:js中的類型判斷:



      判斷基本類型,返回一個字符串

      1

      console.log(typeof '');//string

      console.log(typeof []);//object

      console.log(typeof {});//object

      console.log(typeof 1);//number

      console.log(typeof null);//object

      console.log(typeof undefined);//undefined

      console.log(typeof true);//boolean

      console.log(typeof function(){});//function

      console.log(typeof /\d/);//object





      檢查某個對象屬于哪個構(gòu)造函數(shù),返回true/false

      1

      function A(){};

      function B(){};

      let a = new A();

      console.log(a instanceof A);

      console.log(a instanceof B);

      console.log([] instanceof Array);//true

      console.log({} instanceof Object);//true

      console.log(/\d/ instanceof RegExp);//true

      console.log(function(){} instanceof Object);//true

      console.log(function(){} instanceof Function);//true





      變量聲明

      js的變量聲明其實大體上可以分為三種:var聲明、let與const聲明和函數(shù)聲明。



      函數(shù)聲明

      doSomething();

       

      function doSomething() {

          console.log('doSomething');

      }

      var foodoSomething= 2;



      你覺得上面會輸出什么?TypeError嗎?其實輸出的結(jié)果是foo。這就引出了我們的問題了,當(dāng)函數(shù)聲明與其他聲明一起出現(xiàn)的時候,是以誰為準(zhǔn)呢?答案就是,函數(shù)聲明高于一切,畢竟函數(shù)是js的第一公民。



      那么,下面的例子呢?



      doSomething();

       

      function doSomething() {

          console.log('1');

      }

       

      function doSomething() {

          console.log('2');

      }



      當(dāng)出現(xiàn)多個函數(shù)聲明,那怎么辦呢?以上代碼輸出結(jié)果為2。

      因為有多個函數(shù)聲明的時候,是由最后面的函數(shù)聲明來替代前面的。



      domeSomething();

       

      var domeSomething= function() {

          console.log('domeSomething');

      }



      var domeSomething = function() {}這種格式我們叫做函數(shù)表達式。



      它其實也是分為兩部分,一部分是var foo,而一部分是foo = function() {},參照例2,我們可以知道,這道題的結(jié)果應(yīng)該是報了TypeError(因為foo聲明但未賦值,因此foo是undefined)。



      js中的變量提升和函數(shù)提升

      在js中對變量進行操作后打印值經(jīng)常會出現(xiàn)undefined的現(xiàn)象。其實原因是因為js中有一個叫做變量提升的功能。舉例:

      1

      var data="lyyyyy";

      getData();

      function getData(){

      //第一次打印

      console.log("data值為: ", data);

      var data="yyyyyyy";

      //第二次打印

      console.log("data值為: ", data);

      }



      打印的值第一個為undefined,而第二個打印的值為yyyyy.



      原因:

      在執(zhí)行g(shù)etData()方法的時候會在函數(shù)內(nèi)部首先將變量的聲明提升到第一步。

      然后再聲明函數(shù)內(nèi)部的函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)。

      之后才會按照方法內(nèi)部的邏輯先后順序執(zhí)行代碼。前兩步只是聲明!!!

      看到這里應(yīng)該就已經(jīng)知道為什么會有上面那樣的結(jié)果了。



      實際的方法內(nèi)部代碼執(zhí)行順序應(yīng)該是這樣的:



      function getData(){

      //一。聲明變量

      var data;

      //二。聲明函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)



      //三。按照代碼的順序執(zhí)行

      console.log("data值為: ", data);

      data="yyyyyyy";

      //第二次打印

      console.log("data值為: ", data);

      }



      看到拆分后的代碼執(zhí)行順序?qū)Y(jié)果也就不迷茫了。



      為什么有變量提升

      那么為什么會出現(xiàn)變量提升這個現(xiàn)象呢?



      其實js和其他語言一樣,都要經(jīng)歷編譯和執(zhí)行階段。而js在編譯階段的時候,會搜集所有的變量聲明并且提前聲明變量,而其他的語句都不會改變他們的順序,因此,在編譯階段的時候,第一步就已經(jīng)執(zhí)行了,而第二步則是在執(zhí)行階段執(zhí)行到該語句的時候才執(zhí)行。



      總結(jié)

      1.js會將變量的聲明提升到j(luò)s頂部執(zhí)行,因此對于這種語句:var a = 2;其實上js會將其分為var a;和a = 2;兩部分,并且將var a這一步提升到頂部執(zhí)行。



      2.變量提升的本質(zhì)其實是由于js引擎在編譯的時候,就將所有的變量聲明了,因此在執(zhí)行的時候,所有的變量都已經(jīng)完成聲明。

      3.當(dāng)有多個同名變量聲明的時候,函數(shù)聲明會覆蓋其他的聲明。如果有多個函數(shù)聲明,則是由最后的一個函數(shù)聲明覆蓋之前所有的聲明。


      ————————————————
      版權(quán)聲明:本文為CSDN博主的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。


      藍藍設(shè)計www.li-bodun.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)


      日歷

      鏈接

      個人資料

      藍藍設(shè)計的小編 http://www.li-bodun.cn

      存檔

      主站蜘蛛池模板: 调教在线播放黄| 欧美成人一区二免费视频| 99久久精品国产免费| 国产精品无码翘臀在线看| 精品无码国产一区二区三区AV| 日韩精品久久久久久久电影蜜臀 | 欧美最猛黑人xxxxx猛交| 日本高清久久一区二区三区| av小次郎网站| 亚洲精品老司机| 99香蕉国产精品偷在线观看| 久久亚洲中文字幕伊人久久大| 亚洲日韩Av中文字幕无码| 精品香蕉久久久午夜福利| 国产精品美女一区二三区| 夜夜添无码一区二区三区| 老湿机香蕉久久久久久| 无码国产精品一区二区免费模式| 亚洲成aⅴ人在线电影| 华人在线亚洲欧美精品| 一本无码字幕在线少妇| 熟女一区二区中文字幕| 国产成人精品三上悠亚| 亚洲国产日韩成人a在线欧美| 精品无码久久久久久久久粉色| 国产精品一区在线蜜臀| 亚洲最大网站无码| 精品伊人久久久大香线蕉天堂| 国产av国片精品jk制服| 亚洲中文字幕永久在线全国| 久久久久人妻一区精品色欧美 | 久久久久久久香蕉国产30分钟| 中文字幕乱码熟妇五十中出| 性开放的女人aaa片| 欧美日韩精品综合在线一区| 无码免费午夜福利看片| 国产蜜臀av在线一区在线| 四川丰满少妇无套内谢| 亚洲日本精品国产第一区| 东京热一精品无码av| 久热综合在线亚洲精品|