iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
自我挑戰組

I don't know JS yet系列 第 28

[ Day 28 ] I don't know JS yet - Variable Re-declaration? ( part1 )

  • 分享至 

  • xImage
  •  

今天的學習是 Scope & Closure Ch.5 Re-declaration

主要討論 var let const 宣告的變數與 re-declaration 的關聯。
重點提醒:
var: function scope
let, const: block scope

範例一: 無用的宣告

var myName = 'Frank';
console.log(myName); // Frank

var myName;
console.log(myName); // Frank

上面的 snippet,myName 在同個 scope 裡出現兩次宣告,第二次的宣告會被視作無意義的宣告。
我們看看上面的 snippet 在 hoisting 時會像什麼情況

var myName;
var myName;
myName = 'Frank';
console.log(myName);
console.log(myName);

宣告變數的部分,會被提升至 scope 的最上方。

範例二:別忘了 var 可以 re-assignment

var greeting;

function greeting() {
    console.log('Hello');
}

var greeting;

typeof greeting;    // "function"

var greeting = 'Hello';

typeof greeting;    // "string"

範例三:同個 scope 裡,不能 re-declare 同樣名稱的變數

let studentName = "Frank";
console.log(studentName);
let studentName = "Gigi"; // Uncaught SyntaxError: Identifier 'studentName' has already been declared 
var studentName = "Frank";
console.log(studentName);
let studentName = "Gigi"; // Uncaught SyntaxError: Identifier 'studentName' has already been declared 

範例四:constant re-declare ?

const empty; // SyntaxError: Missing initializer in const declaration

SyntaxError 代表在程式開始執行之前,就有的問題。

const myAge = 23;
console.log(myAge); // 23

myAge = 25; // TypeError: Assignment to constant variable.

TypeError 代表 operation 不能被執行,因為 myAge 的 type 是 constant,constant 不能執行 re-assignment。

有了上面兩個 Error,我們知道 constant 在宣告時,因為一定要 assignment 且不能 re-assignment,所以 constant 不允許 re-declare。

明天要討論 Loops 裡的變數宣告,屬於 re-declaration 嗎?


上一篇
[ Day 27 ] I don't know JS yet - Hoisting
下一篇
[ Day 29 ] I don't know JS yet - Variable re-declaration ? ( part 2 )
系列文
I don't know JS yet30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言