es6學習筆記--塊級作用域
阿新 • • 發佈:2019-01-11
<script type="text/javascript"> /* * es5只有全域性作用域和函式作用域,沒有塊級作用域 * es6 新增塊級作用域,外層塊級作用域無法讀取內層塊級作用域中let,const申明的變數 * 函式申明最好在全域性變數中申明,理論上塊級作用域中申明的函式類似let申明的函式,對作用域之外沒有影響,但瀏覽器實現並沒 * 有遵循改該規則,函式申明類似var變數申明,存在變數提升 */ { var a = 10; let b = 20, c = 30; const d = 40,//const定義常量申明時必須賦值 constObj = { a: 'yy' }; console.log(a,',',b);//10,20 var a = 'aa'; //let b = 'bb';//SyntaxError,同一作用域內不能重複申明相同變數 //var b = 'bb';//SyntaxError,同一作用域內不能重複申明相同變數 //d = 'gg';//TypeError,const 定義基本型別常量不能修改 constObj.a = 'gg'; console.log(constObj);//gg,定義引用型別常量可以修改屬性值,不能整個修改修改 //constObj = {};//TypeError { //b = 'some valeus'; //ReferenceError,同一作用域內變數必須先申明後使用,後面的let申明綁定了該作用域,不存在變數提升 //console.log(d);//ReferenceError,同let申明 var a = 100; let b = 200; const d = 'inner var'; console.log(a,',',b);//100,200 console.log(c);//內層作用域可以訪問外層 } } console.log(a);//100 //console.log(b,d);//ReferenceError,let,const申明的變數只在程式碼塊內有效 /* * for迴圈的迴圈變數部分是外層作用域,迴圈體屬內部作用域 */ var arr = []; for(let i = 0,str = 'loop'; i < 10;i++){ let str = 'inner loop'; //arr[i] = function(str = 'params'){//SyntaxError,函式引數申明和函式體同屬一個作用域,引數申明預設使用let arr[i] = function(){ let str = 'function body'; console.log(i); console.log(str); } } arr[4](); //4 //function body /* * 全域性var,function 申明的變數依舊屬於window屬性 * es6中全域性let,const申明的變數則不再屬於window屬性 */ var global_a = 'aa'; let global_b = 'bb'; const global_c = 'cc'; function foo(){} console.log(window.global_a);//aa, console.log(window.global_b);//undefined console.log(window.global_c);//undefined console.log(window.foo);//function foo </script>