成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是Javascript Hoisting?

開發 后端
Javascript是一門容易遭人誤解的語言,但是它的強大毋庸置疑。個人覺得,要想深入理解Javascript語言,首先必須對其基本的概念(例如:Scope,Closure,Hoisting等)要真正理解。今天想通過自己的理解來對Javascript Hoisting(國內一般翻譯為 變量提升)做一個闡述

  Javascript是一門容易遭人誤解的語言,但是它的強大毋庸置疑。個人覺得,要想深入理解Javascript語言,首先必須對其基本的概念(例如:Scope,Closure,Hoisting等)要真正理解。今天想通過自己的理解來對Javascript Hoisting(國內一般翻譯為 變量提升)做一個闡述:

  在解釋Javascript Hoisting之前,先看一下幾段代碼:

 1     //代碼段1--------------------------
 2     var myvar = '變量值'; 
 3     console.log(myvar); // 變量值
 4     //代碼段2--------------------------
 5     var myvar = '變量值';  
 6     (function() { 
 7       console.log(myvar); //變量值
 8     })();
 9     //代碼段3----------------------------
10     var myvar = '變量值'; 
11     (function() { 
12       console.log(myvar); // undefined 
13       var myvar = '內部變量值'; 
14     })();    

  代碼段1會在控制臺打印出 變量值 ,很容易理解;代碼段2也會在控制臺打印出 變量值 ,Javascript編譯器首先在匿名函數內部作用域(Scope)查看變量myvar是否聲明,發現沒有,就繼續向上一級的作用域(Scope)查看是否聲明 myvar,發現存在,即打印出該作用域的myvar值。但代碼段3只是對代碼段2做一個微調,結果卻輸出了undefine!!!

  在理解代碼段3之前,必須先理解Javascript Hoisting的概念。Javascript Hoisting:In javascript, every variable declaration is hoisted to the top of its declaration context.我的理解就是在Javascript語言中,變量的聲明(注意不包含變量初始化)會被提升(置頂)到聲明所在的上下文,也就是說,在變量的作用域內,不管變量在何處聲明,都會被提升到作用域的頂部,但是變量初始化的順序不變。

下圖的左邊和右邊的代碼輸出結構是一樣的,左邊的代碼段在JS執行時,實際的執行順序如右邊的代碼所示(JS編譯器會將變量聲明進行提升處理)。

  理解了提升的概念之后,再回到開頭的代碼段3的理解中來,代碼段3和在被Hositing之后的代碼如下圖所示:

  二者輸出的結構都為undefined!可理解為內部變量myvar在匿名函數的內***一行進行變量聲明并賦值,但是JS解釋器會將變量聲明(不包含賦值)提升(Hositing)到匿名函數的***行(頂部),由于只是聲明myvar變量,在執行console.log(myvar)語句時,并未對myvar進行賦值,所以JS輸出undefined。

  如果變量聲明未提升(Hositing)置頂,則應該會報錯誤。如下圖所示:

  下面給個測試題,來看看你對Hositing的概念是否理解:

1     //測試代碼----------------------
2     var myvar = '變量值'; 
3     (function() { 
4       console.log(myvar); // ?
5       myvar = '內部變量值'; 
6     })();

  該代碼段應該輸出什么值呢?

答案是 變量值。

責任編輯:李英杰 來源: 博客園
相關推薦

2011-11-11 15:47:22

JavaScript

2021-03-09 08:50:58

JavaScript前端作用域

2021-11-15 09:44:49

Webpack 前端 Scope Hois

2021-01-13 11:25:12

JavaScript閉包函數

2021-03-20 22:46:22

IaaSSaaSPaaS

2019-07-09 10:43:57

JavaScriptWeb前端

2020-08-07 07:05:48

JavaScript開發技術

2023-09-01 13:49:00

內存進程線程

2020-07-14 14:59:00

控制反轉依賴注入容器

2021-06-04 11:10:04

JavaScript開發代碼

2023-06-26 23:48:42

Javascript函數

2025-03-17 08:30:00

JavaScript循環代碼

2023-05-23 16:27:43

Javascript形參實參

2023-05-24 16:15:08

Javascript參數

2017-12-19 21:29:58

物聯網區塊鏈大數據

2020-11-20 10:51:03

云計算

2018-01-30 11:17:56

集群分布式SOA?

2015-10-29 14:29:48

javascriptthis指向

2023-09-14 15:00:31

2009-07-16 09:56:32

什么是iBATIS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99亚洲国产精品 | 国产精品一区在线观看 | 久久精品99久久 | 狠狠综合久久av一区二区老牛 | 亚洲伦理自拍 | 嫩草视频在线免费观看 | 国产精品不卡 | 日一区二区 | 日韩淫片免费看 | 99精品欧美一区二区三区 | 永久www成人看片 | 国产一区二区三区亚洲 | 久久久噜噜噜久久中文字幕色伊伊 | 欧美不卡一区二区 | 日韩视频在线观看一区二区 | 黄色毛片免费看 | 亚洲一区二区三区免费观看 | 欧美日韩一区在线 | 欧美一级在线观看 | 免费在线一区二区 | 成人一区二区三区在线观看 | 九九热精品免费 | 亚洲精品女人久久久 | 国产女人与拘做受免费视频 | 国产精品亚洲综合 | 成人一级毛片 | 97视频人人澡人人爽 | 91亚洲精华国产 | 精品欧美在线观看 | 成人免费视频观看视频 | 黄色大片免费播放 | 男女网站免费观看 | 91 久久 | 国产精品久久久久久中文字 | 国产免费拔擦拔擦8x高清 | 日韩精品一区二区三区中文在线 | 91精品国产一区二区三区动漫 | 欧美成人精品一区二区男人看 | 日韩欧美一级片 | 久久综合成人精品亚洲另类欧美 | 国产精品久久毛片av大全日韩 |