let聲明

 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>
相關文章
相關標籤/搜索