精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91亚洲国产成人精品一区二区三| 色呦哟—国产精品| 日韩欧美在线观看视频| 无遮挡亚洲一区| 国产精品无码天天爽视频| 欧美午夜影院| 亚洲毛片在线看| 国产又黄又猛的视频| 丁香花在线观看完整版电影| 久久久噜噜噜久久人人看| 成人免费看黄网站| 久久国产黄色片| 亚洲综合婷婷| 亚洲图片在区色| 日本中文字幕有码| 日韩一区精品| 精品久久久久久久久中文字幕 | 四季av一区二区三区免费观看| 欧美xingq一区二区| 国产一二三四在线视频| 第四色日韩影片| 《视频一区视频二区| 欧美一进一出视频| 人妻中文字幕一区| 国产综合色产在线精品| 国产成人一区二区三区小说| 免费一级片视频| 久久免费大视频| 亚洲美女视频网站| 国产精品果冻传媒| 久久亚洲精精品中文字幕| 欧美亚洲愉拍一区二区| 国产l精品国产亚洲区久久| 激情图片在线观看高清国产| 亚洲欧洲一区二区在线播放| 少妇精品久久久久久久久久| 三级理论午夜在线观看| 成人av电影在线观看| 7777精品伊久久久大香线蕉语言| 中文字幕在线视频第一页| 免费视频一区| 欧美一区二区三区免费观看| 日韩精品一区三区| 激情六月综合| 欧美激情视频在线观看| 中文字幕av播放| 久久精品亚洲人成影院| 久久精品亚洲94久久精品| 精品一区二区6| 日韩av久操| 中文字幕日韩高清| 日韩女同一区二区三区| 成人激情视频| 日韩有码在线电影| 欧美色图17p| 先锋资源久久| 久久久精品国产| 丝袜美腿小色网| 你懂的视频一区二区| 欧美日韩xxx| 国产 日韩 欧美 成人| 亚洲伦伦在线| 欧美亚洲成人免费| 天堂网免费视频| 丝袜亚洲另类丝袜在线| 国产精品国模在线| 日韩电视剧在线观看免费网站| www.亚洲免费视频| 激情无码人妻又粗又大| 91视频一区| 久久精品视频在线观看| 激情视频在线播放| 99精品视频免费观看| 欧洲成人免费视频| 最近中文字幕在线视频| 久久国产精品第一页| 91深夜福利视频| 亚洲国产视频一区二区三区| 成人免费高清在线| 欧美三级网色| 黄视频网站在线| 亚洲一区二区av电影| 国产免费黄色av| 亚洲欧美在线成人| 欧美一区二区三区思思人| 亚洲麻豆一区二区三区| 蜜臀91精品国产高清在线观看| 在线播放国产一区中文字幕剧情欧美| 在线观看亚洲网站| 国产精品a久久久久| 国产91精品久久久久久| 中文字幕av免费观看| 国产成人av影院| 欧美一区二区高清在线观看| 免费黄网在线观看| 精品久久久久久中文字幕一区奶水| 国产福利影院在线观看| 日本免费一区二区视频| 亚洲欧洲黄色网| 五月天丁香激情| 久久精品首页| 北条麻妃高清一区| 国产一区二区三区福利| 亚洲品质自拍视频| 国产av人人夜夜澡人人爽麻豆 | 97人人做人人爱| 亚洲最大成人av| 91视频国产观看| 免费观看国产视频在线| 中文字幕系列一区| 日韩av网址在线| 国产这里有精品| 奇米色一区二区| 久久精品二区| 丝袜综合欧美| 欧美高清激情brazzers| 亚洲图片另类小说| 亚洲精品国产日韩| 亚洲影院高清在线| 日本在线观看免费| 色综合久久六月婷婷中文字幕| 一级全黄裸体片| 久久久久久久久久久妇女| 日韩av电影免费观看高清| 国产18精品乱码免费看| 亚洲黄网站在线观看| 日本黄大片一区二区三区| 国产精品一线天粉嫩av| 欧美在线观看视频| 天天爽夜夜爽夜夜爽| 一区二区三区精品| 在线观看网站黄| 亚洲va在线| 国产一区二区视频在线观看| 国产女人在线观看| 一本大道久久a久久精二百| 五月天激情小说| 亚洲午夜极品| 国产66精品久久久久999小说| 2024短剧网剧在线观看| 欧美一级一区二区| 日本中文字幕免费在线观看| 精品亚洲成a人在线观看| 亚洲午夜精品国产| 日韩精品第二页| 日韩一区二区三区国产| 888奇米影视| 中文字幕欧美一| 三级性生活视频| 在线精品国产| 99在线免费观看视频| 男女羞羞视频在线观看| 精品日本一线二线三线不卡| 免费人成年激情视频在线观看| 国产成人一区在线| 日韩精品在线视频免费观看| 国产人妖ts一区二区| 91精品国产高清| 男人天堂资源在线| 欧美三级中文字幕在线观看| 国产免费一区二区三区四区| 国产精品一区久久久久| 成人在线视频一区二区三区| 精品福利一区| 国产va免费精品高清在线| av在线三区| 欧美一区二区三区男人的天堂| 免费三片在线播放| www亚洲一区| 五月婷婷激情久久| 亚洲天堂一区二区三区四区| 97久久夜色精品国产九色 | 亚洲国产乱码最新视频| 亚洲人人夜夜澡人人爽| 日本大胆欧美人术艺术动态| 福利网在线观看| 青青草原在线亚洲| 国产精品日韩一区| huan性巨大欧美| 精品欧美一区二区三区| 国产精品精品一区二区三区午夜版 | 国产日韩视频一区| 宅男噜噜噜66国产日韩在线观看| 欧美大香线蕉线伊人久久国产精品| se01亚洲视频| 久久夜精品香蕉| 污污网站免费在线观看| 欧美私人免费视频| 久久久久亚洲av成人片| 国产亚洲一本大道中文在线| 九九热精品国产| 国产精品毛片在线看| 制服诱惑一区| 欧美三级午夜理伦三级小说| 国产日韩换脸av一区在线观看| 丁香花在线高清完整版视频| 色青青草原桃花久久综合| 蜜臀av在线观看| 欧美日韩高清影院| 日本道在线观看| 综合欧美亚洲日本| 亚洲成人网在线播放| 国产精品一区二区在线观看不卡 | 国产+成+人+亚洲欧洲自线| 国产a级一级片| 欧美欧美全黄| 一区二区不卡视频| 亚洲最好看的视频| julia一区二区中文久久94| 成人看片网页| 91黑丝在线观看| 在线欧美三级| 中文字幕自拍vr一区二区三区| 熟妇高潮一区二区高潮| 日韩一区二区在线观看视频| 欧美 亚洲 另类 激情 另类| 欧美午夜无遮挡| 日韩精品成人一区| 亚洲最色的网站| 在线观看成人毛片| 国产精品人妖ts系列视频| 艳妇乳肉亭妇荡乳av| 国产福利一区二区三区在线视频| 少妇一级淫免费播放| 亚洲综合日本| 激情深爱综合网| 亚洲一级影院| 日韩免费在线观看av| 91精品一区二区三区综合在线爱| 亚洲精品电影在线一区| 你懂的一区二区三区| 久久久久久久久久久久久久一区| 99久久婷婷国产综合精品青牛牛| 亚洲一区二区三区四区在线播放| 四虎国产精品永久在线国在线| 国产精品扒开腿做爽爽爽视频| 手机在线观看av网站| 97国产suv精品一区二区62| 欧美人体视频xxxxx| 九色91av视频| 色www永久免费视频首页在线| 免费91在线视频| 成人免费看片| 欧美成在线观看| 韩国成人免费视频| 久久免费国产精品1| av中文在线资源库| 2019精品视频| 暖暖成人免费视频| 国产福利精品视频| 国产第一亚洲| 成人国产精品av| 国产一区二区av在线| 91av免费看| 成人知道污网站| 国产一区二区三区免费不卡| 秋霞蜜臀av久久电影网免费 | 成人激情在线| 中文字幕一区综合| 中文字幕亚洲综合久久五月天色无吗''| 日本特级黄色大片| 欧美福利电影在线观看| 97在线国产视频| 亚洲欧美日韩国产| 国产wwwxx| 韩国欧美国产一区| 亚洲少妇一区二区三区| 91在线视频网址| 精品人妻中文无码av在线| 中文字幕在线观看一区| 澳门黄色一级片| 午夜精品在线看| 免费看污视频的网站| 欧美日韩成人综合在线一区二区| 99久久久国产精品无码免费 | 国产在线一二三| xvideos国产精品| 国产探花在线观看| 日本精品久久久久影院| 日日夜夜亚洲精品| 国产二区不卡| 精品日韩一区| 亚洲av综合色区| 国产精品久久久免费| www.超碰97.com| www..com久久爱| 亚洲图片第一页| 亚洲专区一二三| japanese国产在线观看| 精品国产髙清在线看国产毛片 | 免费91麻豆精品国产自产在线观看| 51精品在线| 91精品久久久久久久久久久久久久| 丁香5月婷婷久久| 亚洲a∨一区二区三区| 亚洲小说欧美另类社区| 国产一级特黄a大片免费| 国产成人欧美日韩在线电影| 欧美偷拍一区二区三区| 亚洲一区在线观看视频| 中文字幕精品一区二区精| 亚洲精品一区二区三区香蕉| av影片免费在线观看| 97精品在线视频| 国模大尺度视频一区二区| 欧美日韩精品免费观看| 中文字幕一区二区三三| 国产视频在线视频| av一区二区三区| 四虎精品免费视频| 欧美中文一区二区三区| 青青青草网站免费视频在线观看| 欧美伦理91i| 日本精品久久| 日本视频精品一区| 亚洲视频播放| 极品白嫩的小少妇| 亚洲色图清纯唯美| 在线观看毛片网站| 亚洲午夜精品视频| 亚洲福利影院| 国产欧美日韩综合精品二区| 你懂的国产精品永久在线| 午夜一区二区视频| 国产精品素人视频| 极品国产91在线网站| 亚洲精品91美女久久久久久久| 日日夜夜天天综合入口| 91色p视频在线| 亚洲大全视频| 91插插插影院| 亚洲欧美另类久久久精品 | 亚洲精品白浆高清久久久久久| 永久免费网站在线| 亚洲永久在线观看| 永久91嫩草亚洲精品人人| 天天摸天天舔天天操| 国产精品天美传媒| 在线观看毛片网站| 久久精品国产欧美亚洲人人爽| 色综合视频一区二区三区日韩| 亚洲巨乳在线观看| 久久99九九99精品| 久久久久久久久久97| 在线成人免费视频| av在线免费观看网址| 99热在线播放| 黄色精品网站| 欧美丰满少妇人妻精品| 欧美日韩在线免费观看| 精品一二三区视频| 国产精品亚洲片夜色在线| 99国产精品一区二区| 亚洲精品国产久| 亚洲一二三四区| 午夜福利理论片在线观看| 欧美有码在线观看| 成人羞羞在线观看网站| 日日干日日操日日射| 一区二区三区在线播| 天堂成人在线视频| 国产成人涩涩涩视频在线观看| 成人精品视频| 在线播放黄色av| 黄色一区二区在线观看| 男男激情在线| 国产日韩精品综合网站| 欧美二区视频| 成人乱码一区二区三区av| 欧美午夜精品一区二区三区 | 欧美亚洲精品在线| 波多野结衣免费观看| 亚洲国产成人av好男人在线观看| 亚洲aⅴ在线观看| 国产激情999| 91精品成人| 欧美肉大捧一进一出免费视频| 色婷婷精品久久二区二区蜜臀av| 在线国产91| 国产成人精品日本亚洲11| 久久深夜福利| 日本黄色小说视频| 亚洲欧洲xxxx| 日韩中文在线| 农村妇女精品一二区| 亚洲欧洲日产国产综合网| 欧美自拍偷拍第一页| 国产精品久久久久久久久久久久午夜片 | 国产精品久久久久秋霞鲁丝| 91视频一区| 中文在线永久免费观看| 欧美性猛交一区二区三区精品| 97caopron在线视频| 精品一区二区三区视频日产| 日本v片在线高清不卡在线观看| 五月天丁香激情| 亚洲午夜av电影| 国产精品2023| 免费一区二区三区在线观看| 精品色蜜蜜精品视频在线观看|