1 <script> 2 /** 3 * es6 let 練習 4 * 生效範圍:塊級代碼代碼內。 5 */ 6 // { 7 // let a=2; 8 // var c=2; 9 // } 10 // console.log(c);//全局變量 11 // console.log(a);//undefined 12 // for循環內適用let 變量做用範圍只在for循環體內 13 // for(let i=0;i<2;i++){ 14 // console.log(i) 15 // } 16 // console.log(i);//undefined 17 //在for循環裏 let變量 保存當時的值 不一樣於var 18 let arr=[]; 19 for(let i=0;i<4;i++){ 20 arr[i]= ()=>{ 21 console.log(i); 22 } 23 } 24 arr[0]();//0 25 arr[1]();//1 26 let arrvar=[]; 27 for(var i=0;i<4;i++){ 28 arrvar[i]=()=>{ 29 console.log(i) 30 } 31 } 32 arr[0]();//都是0 33 arr[1]();//1 34 /** 35 * 一、在for循環中,let聲明的變量都是新的變量,都在本輪有效,在新一輪都是新的值。在每次循環中js引擎都會記錄上一次的變量值,以便計算本輪的值。 36 * 37 * @type {NodeListOf<HTMLElementTagNameMap[string]>} 38 */ 39 let btns=document.querySelectorAll("button"); 40 for(let i=0;i<btns.length;i++){ 41 btns[i].addEventListener('click',ev => {//注意let聲明的i是每次循環的i都是新的變量。全部在事件觸發的時候i的值 是當時循環的值。而不是最後的值。 42 alert(i); 43 }) 44 } 45 let divs=document.querySelectorAll("div"); 46 for(var i=0;i<divs.length;i++){ 47 divs[i].addEventListener('click',ev => {//須要注意 在調用事件函數的的i已是divs.lenth的值。由於此時i已經不知足循環條件 48 alert(i); 49 }) 50 } 51 /** 52 * 一、在循環變量中是父做用域而下面的塊級標籤是子做用域。 53 */ 54 for(let i=0;i<5;i++){ 55 let i='cc';//注意此時的是從新聲明i變量! 56 console.log(i); 57 } 58 /** 59 * var聲明的變量都是都有變量提高的,在調用未聲明(var)的變量的時候,爲undefined 60 * let 不存在聲明變量提高,在調用未聲明的變量的時候,會報錯 61 */ 62 console.log(k); 63 var k; 64 console.log(m); 65 let m=2; 66 </script>