Categories: Front-End JavaScript

JS-Hoisting提升

想必這個是踏入JavaScript第一個大魔王吧!? (疑

首先我們要提2個階段:

  • 創造階段
  • 執行
給予肝肝的工程師小額捐款'v' ETH/ERC20
0xd20c50c82450ee288711bf5e3f9238bc816c168a

參考資料: 六角學院

範例1:  
function callname(){
    console.log('Jen');
    //Jen 這個callname() 裡面的內容已經被完整的創造
}

callname();
範例2:  
callname();

function callname(){
    console.log('Jen');
    //Jen 這個callname() 裡面的內容已經被完整的創造
}

範例1~2的輸出結果

解釋:

Function 函式會優先被創造( 提升 )

內容陳述式也是! *不包含記憶體區塊

你會發現, 函式內容為”字串” 陳述式

下一段改成”變數內容”, 會怎麼樣呢??

變數_內容

範例3
//創造階段
function callname(){
    console.log(Jen);
    //Jen沒有創造階段, 沒有記憶體空間, 也沒有執行
}

//執行
callname();

範例3的輸出結果

我們將範例3 ,var變數進行創造 “記憶體區塊”

//創造階段
var  Jen 
function callname(){
    console.log(Jen);
    //Jen 在創造階段已經有記憶體區塊
}

//執行
callname();

解釋:

對於var 創造, 會將var 宣告的動作宣稱 “提升”

會發現僅僅是沒在 記憶體區間內 給予 “數值”

好啦! 給予Jen 一個數值之後

範例4
//創造階段
var  Jen =1;

///創造階段
function callname(){
    console.log(Jen);
    
}

//執行階段 此時才會把 Jen= 1 賦予值
callname();

解釋:

第一行 var Jen =1; 將記憶體區間宣告出來 = “提升”

要到了callname() 執行階段, var Jen 才會被賦予 = 1

我把第一行 var Jen=1

移動到Function 後方檢驗看看??

範例5
function callname(){
    console.log(Jen);
    
}

var Jen=1;
callname();

Funtion 之後, var Jen=1 執行創造階段 (提升)

再來從執行階段>> callname() 將賦予值給 Jen

一樣按照 :

  • 創造階段
  • 執行

結語

  • Function & 內部陳述式, 優先Hoisting /提升
  • var 宣告記憶體區間 Hoisting /提升

這只是第一階段的提升觀念
畢竟先了解創造>>執行的順序, 之後把各種觀念加進去, 對於往後對JS的深度語法有很大的幫助喔!

lioajimzen

Share
Published by
lioajimzen
Tags: Hoisting

Recent Posts

Vue – 運行ES Module,import與export

import 與 export 在Node.js 有提到其用法: Node.js require、module以及exports 模組設定 - Hugo Habor 每一個Javascript檔案可當作獨立模組系統(ES Module) 1. Module(模組)…

12 months ago

當你的Windows應用程式完全無法執行時,該怎麼辦?

作者今天遇到一個很奇怪的問題 寫程式寫到一半... 點擊應用程式時... 怎麼都跳不出畫面... 後來查詢了一下是Reg註冊可能被微軟更新給搞掉了... 文章資訊來源: 【以解決】各位.exe檔案打不開,不要相信"在 Windows 7 或 Windows Vista 中無法打開 .EXE 檔案"這篇文章…

2 years ago

Python environments in VS Code-建立虛擬環境

Python environments in VS CodePython-建立虛擬環境

2 years ago

Node.js 核心模組-create-server

Node.js可以提供你很多模組,今天來探索如何使用 Node.js 的 http 模組來架設一個簡單的伺服器。 本篇使用模組require 載入你所需要的模組。這次我們使用'http' 模組來創造一個簡單的server。 資料參考 Node.js - createServer 起手式 - iT…

2 years ago

Node.js require、module以及exports 模組設定

針對Node.js來談談 require、module以及exports 模組設定。這些概念允許開發者將大型程序分解成小的、可管理的、可重用的部分,稱為模塊。 下面將逐一介紹這些概念,以及它們如何與 JavaScript 關聯。 An Essential Guide to Node.js Modules (javascripttutorial.net) 1. Module(模組)…

2 years ago

JSON與foreach的逐一條列應用。

像是很多專案必須讀取國家資料中心的metadata,許多檔案格式為CSV、JSON、Html可以利用網頁技術去爬蟲;拿一個範例來嘗試看看就知道這些語法的實際用途。 [主題週]專題報導-開放資料 (Open Data)相關議題與應用 (114230) - Cool3c 在這裡我們使用台北市資料大平台 UBike2.0 作為資料依據! 目的 來抓取空位數量 >15, 抓取空位數量 <15。…

2 years ago