精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一段代碼帶你論證JS基礎[不看后悔篇]

開發 前端
JS基礎對于我們前端開發的重要性不言而知~于是,我們都會選擇去閱讀一些書籍來充實自己。那當我們讀完那些理論基礎之后,你是否依舊迷茫,還是豁然開朗?

 [[357950]]

前言

JS基礎對于我們前端開發的重要性不言而知~于是,我們都會選擇去閱讀一些書籍來充實自己。那當我們讀完那些理論基礎之后,你是否依舊迷茫,還是豁然開朗?

透過現象看本質!

我想:有了理論基礎作為根據的時候,應該多去思考一些代碼的結果來實踐這些理論。

就比如解決bug一樣,你總得先知道出現bug的原因,再根據原因去解決問題是一樣的道理。

code案例

  1. var b = 10; 
  2. (function b(){ 
  3.     b = 20; 
  4.     console.log(b);  
  5. })(); 

這段代碼會輸出什么呢?

(ps:先別著急回答,好好思考一下)

乍一看,這段代碼很簡單,涉及到的內容是var function IIFE,好像也沒什么問題。

這段代碼的在嚴格模式下輸出:TypeError: Assignment to constant variable

意思就是:類型錯誤:對常量變量的賦值

而在非嚴格模式下輸出:

輸出分析

分析嚴格模式下的輸出如果由這個TypeError: Assignment to constant variable.做一個分析的話,那么意味著變量b是不可修改的!

那么現在的問題在于變量b是指外部用var聲明的變量b呢,還是立即執行的具名函數b呢?

如果b是立即執行的具名函數名稱,說實話我也不大確定它是否是可修改。

(ps:大多數的js書籍中都沒有明確指出立即執行函數表達式是否能重新賦值的問題)

但是我一定可以確定的是,如果b是指外部用var聲明的,那么在此代碼中它一定是可修改的。我們都知道用var聲明的全局變量它在任何地方肯定是可以修改的,因為該變量處于作用域的最頂端。

所以在這里我想大膽做個假設:變量b是指立即執行的具名函數名稱b~

做完這個假設,我想說:

那意味著全局變量b在立即執行的具名函數b里訪問不到嗎?

其實不是的,全局變量b在立即執行的具名函數b是可被訪問的,只不過因為具名函數b的內部作用域里也存在了一個用function聲明的變量b,所以在代碼執行的時候js引擎首先找到用function聲明的變量b。正如書籍中講到的作用域查詢是通過從里到外向上查詢。

(ps:之前也順手寫了一篇關于作用域系列的文章:我是這樣理解JavaScript中作用域,望能幫助大家~)

當然在非嚴格模式下,大家可以試著動手在立即執行的具名函數內部函數打印一下window.b,也可論證全局變量b在立即執行的具名函數b里可被訪問!代碼如下:

  1. var b = 10; 
  2. (function b(){ 
  3.     b = 20; 
  4.     console.log(window.b);  
  5. })(); 

到這里,理清楚了立即執行函數b的內部作用域機制,我的疑問又萌生了:

為什么(function b(){}())這樣的函數表達式就不能修改呢?

后來,我查閱了資料,明白了IIFE函數的內部機制~

我所理解的是:

當遇到具名的函數表達式的時,會創建一個輔助的特定對象,將函數表達式的名稱作為唯一的key,用來存儲函數表達式的名稱,然后添加到函數的作用域鏈中,該值只讀,并且不可以被刪除,所以不能對該值進行操作。

所以,在嚴格模式下,一個不可修改的常量被修改之后就會報TypeError: Assignment to constant variable。

分析非嚴格模式的輸出 在非嚴格模式下會靜默失敗,所以不報錯。針對如上的分析之后,會輸出立即執行的具名函數b本身。

code擴展

我將代碼改寫成:

  1. var b = 10; 
  2. (function b(){ 
  3.  return 1; 
  4. })(); 
  5. console.log(b);  

那這段又會輸出什么呢?

無論在非嚴格模式還是在嚴格模式下,這段代碼都會輸出10,也就是全局變量b的值~

寫這段代碼的本意并不是為了猜測結果而想的,我想表達的是:為什么立即執行具名函數b在外部是不可訪問的?難道所有的表達式在外部都不可訪問嗎?

為了解決我的疑問,我通過如下函數foo1和foo2進行分析:

  1. ///片段1 
  2. var foo1 = function () {}; 
  3. console.log(foo1); 
  4. //片段2 
  5. (function foo2(){}) 
  6. console.log(foo2); 

片段1

是讓一個匿名函數表達式賦值給變量foo1,然后該函數可以用foo1這個名稱進行訪問——foo1()。所以打印是一個函數。

片段2

是一個函數表達式,但結果是Uncaught ReferenceError: foo2 is not defined。說明在外部是不可訪問的。

可見,立即執行具名函數b是一個函數表達式,在外部是不可訪問的!(ps:意味著函數表達式既不可能通過名稱在函數聲明之前調用它,也不可能在聲明之后調用它)。

其實,大多數書籍里介紹以及我之前所理解的片段1這樣的代碼就是一個函數表達式。但現在我的理解并不是這樣的~

foo1是一個變量,匿名函數表達式賦值給變量foo1了,所以foo1它可被訪問!

通過自己寫了2個代碼片段,將我的疑惑迎刃而解了~

思考其他案例

在閑暇之余,我將最原始的代碼塊再做了改造,運用這些代碼來溫故并且思考了之前學習的理論基礎。

如下的代碼片段,我將結果也一并和大家揭曉,但我也會和大家分享一下我的心得~

  1. ///片段1 
  2. var b = 10; 
  3. function b() { 
  4.  console.log(12); 
  5.  return 1; 
  6. console.log(b, b());  
  7. //10 TypeError: b is not a function 

為什么會打印10呢,而不是函數b呢?

論據:函數聲明優先于變量聲明~

所以,相當于先利用function聲明了函數b,再利用var重寫了b。

  1. //片段2 
  2. console.log(b, b()); //12 1 
  3. var b = 10; 
  4. function b() { 
  5.  console.log(12); 
  6.  return 1; 

為什么會打印函數b的執行結果12和1呢,而不是全局變量b呢?

論據:函數聲明優先于變量聲明~并且在這個過程中存在變量提升。

片段3

  1. var b = 10; 
  2. b = function() { 
  3.  b = 20; 
  4.  console.log(b); //20 
  5. return 1; 
  6. }; 
  7. console.log(b, b()); //b函數,1 

為什么會打印10呢,而不是函數b呢?

論據:這個過程就是將變量b進行重新賦值。

所以,打印的是10,而不是函數。

片段4

  1. var b = 10; 
  2. //  Duplicate declaration "b" 
  3. let b = function() { 
  4.  b = 20; 
  5.  console.log(b); 
  6.  return 1; 
  7. }; 

論據:用var聲明變量可以可重復聲明,但是用let聲明變量不可重復聲明。

所以js引擎要執行完var b = 10語句之后,遇到了let b之前報錯了。

總結

在寫業務代碼的時候,要盡量去避免聲明變量命名沖突的情況,因為以上案例的的寫法是不合理的,很容易出現意想不到的結果。

為何不規范要求自己而避開不必要的麻煩呢?

當然,我覺得在學習乏味難啃的理論基礎知識時,我覺得應該創造自己的想象力,多去實踐多去思考為什么會有這樣的結果呢?

根據理論證實結果!

這樣才會使得讓自己更加理解理論基礎,并且更好的運用它們,而不僅僅是背/記。

原文:juejin.cn/user/2189882895108616

本文轉載自微信公眾號「前端人」,可以通過以下二維碼關注。轉載本文請聯系前端人公眾號。

 

責任編輯:武曉燕 來源: 前端人
相關推薦

2014-09-02 10:55:25

iOS開發視圖切換

2017-10-11 13:06:16

云計算云成本服務器

2020-04-20 09:01:50

程序員創業 互聯網

2017-08-15 10:53:34

網站設計UIUE

2010-10-09 09:18:59

Shell腳本

2019-05-27 22:59:39

面試SQL語句數據庫

2019-02-18 15:15:41

人工智能AI開發者

2020-12-31 10:14:42

防注入代碼繞過

2018-06-19 08:02:00

統計程序微信

2022-06-21 12:27:12

JavaScript前端

2014-07-08 09:21:10

死代碼創意歌曲

2021-11-24 08:51:32

Node.js監聽函數

2023-02-28 23:04:15

2021-02-04 07:55:28

代碼離職互聯網

2021-04-08 09:14:24

js前端函數

2021-07-01 10:01:16

JavaLinkedList集合

2021-08-14 10:01:43

Python條件語句Python基礎

2015-03-27 11:34:59

JavaJava編寫引發內存泄露

2020-12-29 09:05:48

基礎DjangoORM

2020-04-16 13:58:47

Java代碼框架
點贊
收藏

51CTO技術棧公眾號

久久蜜桃资源一区二区老牛| 丰满诱人av在线播放| 久久av在线| 在线视频免费一区二区| 亚州精品一二三区| 激情影院在线观看| av中文字幕亚洲| 国产精品video| 精品97人妻无码中文永久在线| 国产精品jk白丝蜜臀av小说| 在线欧美一区二区| 国产性生活免费视频| 欧美精品a∨在线观看不卡 | 久久综合九色欧美综合狠狠| 国产日韩精品综合网站| 国产精品第56页| 日韩av在线播放网址| 日韩欧美精品三级| 久久久久久久久久福利| 50度灰在线| 国产精品三级久久久久三级| 国产欧美日韩一区| 伊人网av在线| 国产欧美激情| 欧美激情中文字幕在线| 欧洲美熟女乱又伦| 国产精品网站在线看| 在线电影国产精品| 中文字幕在线观看第三页| 爱情岛亚洲播放路线| 国产精品电影一区二区| 欧美一区2区三区4区公司二百| 99久久久久久久| 男人的天堂久久精品| 78色国产精品| 国产在线欧美在线| 成人3d动漫在线观看| 亚洲精选一区二区| 国产大学生视频| 久久av偷拍| 777午夜精品视频在线播放| 妞干网在线免费视频| 爱啪啪综合导航| 亚洲永久免费av| 久久精品在线免费视频| 看黄网站在线| 最新热久久免费视频| 四虎永久国产精品| 美丽的姑娘在线观看免费动漫| 国产精品77777| 91最新在线免费观看| 在线视频播放大全| 日漫免费在线观看网站| 亚洲国产精品欧美久久| 亚洲精华国产欧美| 久久91亚洲人成电影网站| 婷婷激情四射网| 婷婷六月综合| 久久韩剧网电视剧| 极品色av影院| 欧美成人69| 美女黄色丝袜一区| 欧美卡一卡二卡三| 欧美激情日韩| 国内免费久久久久久久久久久| 久久综合色综合| 狠狠噜噜久久| 91精品国产乱码久久久久久蜜臀| 国产在线精品观看| 99精品视频免费全部在线| 26uuu另类亚洲欧美日本老年| 精品欧美一区二区三区免费观看 | 911亚洲精品| 欧美精品日韩综合在线| 在线看免费毛片| 精品视频一二| 亚洲成人999| 91精品国产自产| 日韩欧美精品一区| 欧美另类xxx| 国产成人无码一区二区三区在线| 国产精品一级| 国产区亚洲区欧美区| 99热这里只有精| a美女胸又www黄视频久久| 激情视频一区二区| 国内三级在线观看| 亚洲免费观看高清| 日本欧美黄色片| 国产私拍福利精品视频二区| 这里只有精品免费| 天堂www中文在线资源| 精品视频亚洲| 欧美激情中文字幕乱码免费| 亚洲婷婷综合网| 久久超碰97人人做人人爱| 国产成人免费电影| 999国产在线视频| 亚洲午夜成aⅴ人片| 国产成人精品无码播放| 看亚洲a级一级毛片| 日韩理论片久久| 日韩激情小视频| 亚洲免费婷婷| 97se国产在线视频| 国产亚洲依依| 亚洲成人精品一区| www.cao超碰| 日本妇女一区| 久操成人在线视频| 国产偷人爽久久久久久老妇app| 国产成人精品在线看| 日韩一区二区三区资源| 99热99re6国产在线播放| 欧美无乱码久久久免费午夜一区| 在线观看免费视频黄| 亚洲一区 二区 三区| 国产成人精品一区二区| 蜜桃视频久久一区免费观看入口 | 天天久久人人| yellow字幕网在线| 日韩欧美美女一区二区三区| 卡一卡二卡三在线观看| 在线一区免费观看| 欧美日韩中文| 日韩精品在线观看一区二区| 97成人资源站| 免费人成黄页网站在线一区二区| 精品日产一区2区三区黄免费| 成人在线播放免费观看| 欧美三级电影网| 日韩中文字幕有码| 国产免费成人| 成人欧美一区二区| 粗大黑人巨茎大战欧美成人| 欧美三级电影精品| 性欧美精品男男| 销魂美女一区二区三区视频在线| 国产精品国色综合久久| 18加网站在线| 日韩欧美一级片| 日本老熟俱乐部h0930| 久久99蜜桃精品| 相泽南亚洲一区二区在线播放 | 久久久久99人妻一区二区三区| 久久中文亚洲字幕| 国产精自产拍久久久久久蜜| 国产区av在线| 在线亚洲欧美专区二区| 亚欧洲乱码视频| 久久免费高清| 亚洲精品在线免费| 亚洲狼人在线| 欧美大奶子在线| 国产又黄又粗又长| 亚洲视频一区二区在线观看| 樱花草www在线| 亚洲精品成人无限看| 亚洲最大的网站| 欧美1234区| 日韩精品在线观看网站| 日韩综合在线观看| 中文字幕av一区二区三区免费看 | 久久久成人精品一区二区三区| 国产香蕉久久| 久久精品国产亚洲精品2020| wwwav在线播放| 性做久久久久久久久| 成人在线视频免费播放| 亚洲综合国产| 影音先锋欧美资源| 136导航精品福利| 国模吧一区二区| 精品av中文字幕在线毛片| 欧美日韩免费视频| 国产乱国产乱老熟300| 不卡av电影在线播放| 熟女人妇 成熟妇女系列视频| 日韩欧美精品综合| 操人视频欧美| 欧美亚洲韩国| 色阁综合伊人av| 午夜精品在线播放| 五月天精品一区二区三区| 99久久久久久久久久| 日本亚洲欧美天堂免费| 中文精品视频一区二区在线观看| 伊人久久影院| 欧美在线不卡区| 在线免费av电影| 亚洲韩国青草视频| 中文字幕日韩三级| 亚洲午夜精品在线| 欧美极品jizzhd欧美18| 成人爽a毛片一区二区免费| 国产欧美高清在线| 亚洲欧美一级二级三级| 免费在线成人av电影| 精品女同一区二区三区在线观看| 北条麻妃99精品青青久久| 日韩一级片免费观看| 欧美自拍丝袜亚洲| 国产大片中文字幕| 国产精品福利av| 亚洲成人av免费在线观看| 久久av资源网| 日本精品一区二区三区四区| 97精品国产| 麻豆精品传媒视频| 欧美另类中文字幕| 国产精品毛片a∨一区二区三区|国 | 波多野结衣国产| 中文字幕一区二区三区色视频| www.美色吧.com| 精品一区二区在线观看| 男人天堂成人在线| 一区二区三区高清视频在线观看| 色呦呦网站入口| 精品国精品国产自在久国产应用| 韩国成人av| 日韩三级av高清片| 成人啪啪免费看| 成人a在线观看高清电影| 69久久夜色精品国产69| 日本片在线看| 欧美成人精品xxx| 亚洲乱亚洲乱妇| 亚洲天堂网站在线观看视频| 特黄视频在线观看| 精品国产精品网麻豆系列| 99精品视频免费看| 9191久久久久久久久久久| 中文字幕一区二区三区波野结| 欧美视频二区36p| 中日韩黄色大片| 精品成人av一区| 国产一级黄色av| 亚洲精品国产一区二区精华液| 男人av资源站| 中文字幕亚洲在| 日本美女黄色一级片| 国产精品视频yy9299一区| 欧美三级视频网站| 日本一区免费视频| 国产精品情侣呻吟对白视频| 欧美极品美女视频| 亚洲av熟女国产一区二区性色| 国产婷婷色一区二区三区在线| 亚洲午夜久久久久久久久红桃| 99精品桃花视频在线观看| 精品一区二区三区四区五区六区| 成人禁用看黄a在线| 日韩成人av影院| 成人午夜电影小说| 无码人妻aⅴ一区二区三区 | 亚洲国产成人久久综合| 少妇精品高潮欲妇又嫩中文字幕 | 五月婷婷综合激情网| 国产精品国产三级国产普通话三级| 欧美亚洲在线播放| 青青草免费观看免费视频在线| 亚洲成色999久久网站| 五月婷婷六月丁香| 亚洲男人第一av网站| 高清av在线| 日韩亚洲欧美成人| 三级福利片在线观看| 国模精品视频一区二区| 成人爽a毛片免费啪啪| 国产成人精品视频在线| 97欧美成人| 99re6热在线精品视频播放速度| 国产成人一二| 欧美另类一区| 午夜欧美在线| 国产一区二区四区| 亚洲天堂自拍偷拍| 日韩电影在线免费看| 乌克兰美女av| 国产尤物一区二区| 黄色免费视频网站| 日本一区二区三区免费乱视频| 婷婷激情四射网| 精品久久久一区二区| 国产情侣免费视频| 欧美成人精品福利| 国产一二在线观看| 久久久久久一区二区三区| 91tv亚洲精品香蕉国产一区| 亚洲一区二区三区视频| 任我爽精品视频在线播放| 一区二区三区观看| 亚洲三级影院| 亚洲成人福利在线| 99re视频精品| 日韩欧美国产成人精品免费| 天天综合网 天天综合色| 亚洲一区中文字幕永久在线| 亚洲精品99999| 久久99精品久久| 日韩美女激情视频| 亚洲国产欧美在线观看| 日韩免费一区二区三区| 精品福利电影| 三上悠亚在线一区二区| 91伊人久久大香线蕉| 午夜免费激情视频| 在线视频欧美精品| 天天干天天操av| 欧美大尺度激情区在线播放| 91伊人久久| 蜜桃999成人看片在线观看| 你懂的亚洲视频| 男女男精品视频站| 91色综合久久久久婷婷| 久久免费公开视频| 在线播放中文一区| 成人全视频高清免费观看| 国内精品免费午夜毛片| 国产精品99久久免费| 日韩av大全| 香蕉成人久久| 亚洲av成人精品一区二区三区| 亚洲色图欧洲色图婷婷| а中文在线天堂| 亚洲精品日韩丝袜精品| av电影院在线看| 国产另类自拍| 亚洲婷婷免费| 成年人看片网站| 伊人一区二区三区| 国产老女人乱淫免费| 综合激情国产一区| 日本一区二区电影| 日韩福利在线| 久久一区二区三区超碰国产精品| 人妻熟女aⅴ一区二区三区汇编| 亚洲香肠在线观看| 亚洲精品一区二区三区新线路 | 久久精品动漫| 黄色短视频在线观看| 欧美日韩性生活视频| 日本人妻丰满熟妇久久久久久| 韩国三级日本三级少妇99| 亚洲一区二区三区在线免费| 91大学生片黄在线观看| 国产精品一品视频| 精品爆乳一区二区三区无码av| 91精品国产一区二区人妖| h片在线免费观看| 亚洲一区二区三区四区视频| 欧美阿v一级看视频| 中文字幕永久免费| 性感美女极品91精品| 午夜视频免费在线| 欧美亚洲视频一区二区| 国产区精品区| 亚洲精品自拍网| 操欧美女人视频| 在线播放中文一区| 无码精品在线观看| 欧美野外猛男的大粗鳮| 在线成人动漫av| 亚洲色图久久久| 亚洲欧洲国产专区| 国产一级视频在线| 国产精品a级| 久久6免费高清热精品| 国产精品久久久久久久久毛片 | 污污视频在线| 国产伦精品一区二区三区在线| 在线一区免费观看| www.日本高清视频| 在线播放亚洲一区| 波多野结衣精品| 日韩精品伦理第一区| 国产一区二区三区四| 免费一级特黄特色大片| 亚洲欧美变态国产另类| 男人天堂久久| 亚洲理论电影在线观看| 久久影院午夜论| 国产又粗又大又黄| 午夜精品视频网站| 欧美午夜精彩| 日韩精品国产一区| 日本韩国一区二区三区视频| 黄色网页在线免费观看| 激情五月综合色婷婷一区二区| 日韩精品91亚洲二区在线观看 | 精品人妻一区二区免费| 色偷偷久久人人79超碰人人澡| 蜜桃av在线免费观看| 狠狠色综合色区| 琪琪一区二区三区| 久草视频手机在线观看| 中文字幕日韩综合av| 欧美电影在线观看免费| 中文字幕第17页| 狠狠躁18三区二区一区|