ES6学习笔记一:let、const、块级作用域

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ES6学习笔记一:let、const、块级作用域脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、ES6新增了let命令

letvar 一样都是用来声明标量,但let所声明的变量只在【声明的代码块内】及【声明之后】有效

{
    console.LOG(a);  // undefined
    console.log(b);  // Uncaught ReferenceError: b is not defined(…)
    VAR a = 5;
    let b = 10;
}
console.log(a);  // 5
console.log(b);  // Uncaught ReferenceError: b is not defined(…)

let命令适合在for循环中使用

// i在for循环内有效
for(let i = 0;i < 5;i++){
    console.log(i); // 0 1 2 3 4
}
console.log(i);    // Uncaught ReferenceError: i is not defined(…)

//i在全局内有效
for(var i = 0;i < 5;i++){
    console.log(i); // 0 1 2 3 4
}
console.log(i);    // 5

let 命令暂时性死区

// 大括号中的a使用了let声明,所以 a在大括号中暂时只能在声明之后有效
var a = 5;
{
    console.log(a); // Uncaught ReferenceError: a is not defined(…)
    typeof a;       // Uncaught ReferenceError: a is not defined(…)
    let a =10;      
    console.log(a); // 10
}
console.log(a);     // 5

let不允许在同一作用域内重复声明变量,因此不能在函数内重新声明变量

{
    let a = 10;
    var a = 15;  //Uncaught SyntaxError: Identifier 'a' has already been declared
}

{
    var a = 10;
    var a = 15;        // 不会报错
    console.log(a);    // 15
}

show(10);  
function show(arg){
    let arg = 5;    //Uncaught SyntaxError: Identifier 'arg' has already been declared(…)
    console.log(arg);
}

hide(10);
function hide(arg){
    {
        let arg = 5;
        console.log(arg);  // 5
    }
    console.log(arg);      // 10
}

二、ES6新增了块级作用域

ES5只有全局作用域和函数作用域,会出现以下的问题

//1、内层变量覆盖了外层变量
var number = 5;
show();
function show(){
    console.log(number);      // undefined
    var number = 10 ;
}

//2、i泄露成全局变量
var string = 'hello';
for(var i = 0 ;i<string.length ;i++){
    console.log(string[i]);  // h e l l o
}
console.log(i);              // 5

ES6块级作用域写法(块级作用域可以无限嵌套,可以代替ES5的匿名函数IIFE)

{
    let number = 5;
    console.log(number);       // 5
    {
        let number = "hello";
        console.log(number);  // hello
    }
}

ES5严格模式下,函数不能在块级中声明,ES6明确规定可以在块级作用域中声明函数,但声明的函数有点类似let,在块级作用域之外不可引用,由于浏览器可以忽略以上规则,所以尽量避免在块级作用域中声明函数。

//ES5非严格模式
if(true){
    function show(){    //不报错
    };
}
//ES5严格模式
'use strict';
if(true){
    function show(){    //直接报错
    };
}

//ES6严格模式
'use strict';
if(true){
    function show(){    //不报错
    };
}

三、ES6新增了const命令

const 声明的是一个只读的变量,一旦声明,不可更改,这就意味着一旦声明就必须初始化,不然会报错,const作用域和let作用域一样.

const PI;             //Uncaught SyntaxError: Missing inITializer in const declaration
const PI = 3.1415926;
console.log(PI);      // 3.1415926;
PI = 4 ;              // Uncaught TypeError: Assignment to constant variable.

//const声明的变量也和let一样,不能重复声明
var a = 1;
let b = 2;
const a = 5;    //Uncaught SyntaxError: Identifier 'a' has already been declared
const b = 6 ;   //Uncaught SyntaxError: Identifier 'b' has already been declared

//对于复合对象,变量名指向的是数据的地址,const声明的指向的是数据的地址不变,但数据可以变;若要冻结数据,可以使用freeze.
const A = {};
A.PRops = 123;
console.log(A.props);  // 123
A = {};                // Uncaught TypeError: Assignment to constant variable.

const B = Object.freeze({});
B.props = 456;         // 常规模式,该行代码无效,严格模式下会报错
console.log(B.props);  // undefined

全局变量的属性

window.a = 1;
var a = 2 ;
console.log(a);         // 2
console.log(window.a);  // 2

window.b = 1;
let b = 2 ;
console.log(b);         // 2
console.log(window.b);  // 1

总结:

ES5 有两种声明变量的方法:var 和 function命令
ES6 有六种声明变量的方法:var 、 function 、let 、constimportclass命令。

脚本宝典总结

以上是脚本宝典为你收集整理的ES6学习笔记一:let、const、块级作用域全部内容,希望文章能够帮你解决ES6学习笔记一:let、const、块级作用域所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。