iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0

常數與scope變數

  • const
    使用const來定義常數,const在定義時一樣會被拉升到外圍函式定義的頂端。
const pi = 3.14;
pi=4; // 會被忽略
const pi =3.1; //發生錯誤無法重新定義
var pi =3.1; //發生錯誤無法重新定義
  • let
    使用let宣告的變數只有在最接近的區塊可使用。
    參考以下例子
for(let x = 1 ;x < 5;x++) { 
    console.log(x); // 2 3 4
}
// for迴圈裡的let x回被提升到頂端
// 下面的程式碼等同上式
// let x; 
// for(x = 1 ;x < 5;x++) { // 此行定義的let x
//     console.log(x); // 1 2 3 4
// }
//-----------------------------------

console.log(x); // 4

if(x > 1){
    let x = x +1;     
    console.log(x); // NaN
}
//等同
// if(x > 1){
//     let x;    // 並未給初始值,所以x = undefined
//     x = x +1; // undefined + 1 =NaN    
//     console.log(x); // NaN
// }

解構型指定

提取等號右邊的值,存放到等號對應的變數。

  • 使用於陣列
let [x,y] = [1,2] // 等同於let x =1 , y=2
[x,y] = [x+1,y+2] // x = 1+1 , y =2+2
console.log([x,y]) // [2,4]

let [x]=[1,2] // 等同let x = 1 , 2 會被忽略
let [x,y]=[1] // 等同let x = 1 , y = undefined
let [,x,,y,]=[1,2,3,4,5] // 等同x = 2 , y = 4 
  • 使用於物件
let test={n:'Jackson',i:1}
let {n:name,i:id} = test; // name='Jackson' ,id=1

Math是全域變數,以下可以簡化使用方式

let {sin:sin,cos:cos,tan:tan} = Math;
// sin = Math.sin , cos = Math.cos , tan = Math.tan

產生器與yield

宣告產生器函式前會多一個 * 。
yield會回傳value與done的物件。

function * gen(){
    let a = yield "A"; 
    let b = yield "B";
    return "TEST";
}
var c = gen(); // gen為產生器,在被呼叫時並不會被執行
// 當執行next() 產生器才會開始執行,當遇到yield後會停止往下執行
// 待下次再執行next會再繼續往下執行直到遇到yield
c.next(); // {value: "A", done: false}
c.next(); // {value: "B", done: false}
c.next(); // {value: "TEST", done: true}

宣告成產生器,與平常宣告的function 結構不太一樣

  • 物件非iterable所以無法使用for..of
var obj_A ={name:'Jackson', id:1, pos: 'taipen'};

// +--------------------+
// |下面的程式碼會有錯誤   
// |因為obj_A並不是iterable
// +--------------------+
// for(let i of obj_A){
//     ...
// }


//需實做Symbol.iterator
obj_A[Symbol.iterator] = function * (){
    for(var i in this){
        yield this[i];
    }
}

for(var v of obj_A){
    console.log(v);
}
// Jackson
// 1
// taipen

上一篇
Day 12: 正規表示式(Regular Expression)
下一篇
Day 14: 伺服端(server side) JavaScript
系列文
Javascript 犀牛本-濃縮再濃縮 提煉再提煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言