es6動態定義方法並執行?


var arr = [];
for(let i=0;i<10;i++) {
    arr[i]=function(){
        console.log(i);
    }
}
arr[6]();//輸出6
var arr = [];
for(var i=0;i<10;i++) {
    arr[i]=function(){
        console.log(i);
    }
}
arr[6](); //var聲明的i是全局變量,所以i=10,輸出10

這種直接動態定義方法並執行的是什么語法規則???

2、

function func(arg) {
  {
    let arg; 
  }
}

這是什么??代碼塊??什么作用??

3、

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    let tmp = 'hello world';
  }
}

f(); // undefined
//let聲明tmp不會造成變量提升,所以會輸出時間
//let不允許在相同作用域內,重復聲明同一個變量
function f1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
//上面的函數有兩個代碼塊,都聲明了變量n,運行后輸出 5。這表示外層代碼塊不受內層代碼塊的影響。如果兩次都使用var定義變量n,最后輸出的值才是 10。
}

4、常量聲明const

const實際上保證的,並不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。對於簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同於常量。但對於復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至於它指向的數據結構是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心

const foo = {};

// 為 foo 添加一個屬性,可以成功
foo.prop = 123;
foo.prop // 123

// 將 foo 指向另一個對象,就會報錯
foo = {}; // TypeError: "foo" is read-only

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM