资讯专栏INFORMATION COLUMN

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

YuboonaZhang / 2428人阅读

摘要:一新增了命令和一样都是用来声明标量,但所声明的变量只在声明的代码块内及声明之后有效命令适合在循环中使用在循环内有效在全局内有效命令暂时性死区大括号中的使用了声明,所以在大括号中暂时只能在声明之后有效不允许在同一作用域内重复声明变量,因此不能

一、ES6新增了let命令

let 和 var 一样都是用来声明标量,但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

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 、const 、import、class命令。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80810.html

相关文章

  • ES6学习笔记--块级绑定

    摘要:对比常量声明与声明常量声明与声明,都是块级声明。最后一点全局块级绑定与不同于的另一个方面是在全局作用域上的表现。块级绑定新的最佳实践在的发展阶段,被广泛认可的变量声明方式是默认情况下应当使用而不是。总结与块级绑定将词法作用域引入。 var变量与变量提升 使用var关键字声明的变量,无论其实际声明位置在何处,都会被视为声明于所在函数的顶部(如果声明不在任意函数内,则被视为在全局作用域的顶...

    wangshijun 评论0 收藏0
  • es6学习笔记-let,const块级作用_v1.0_byKL

    摘要:考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。函数声明语句函数表达式循环循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。声明一个只读的常量。 es6学习笔记-let,const和块级作用域_v1.0 块级作用域 javascript 原来是没有块级作用域的,只有全局作用域和函数作用域 例子1 因为没有块级作用域,所以每次的i都是一...

    Youngdze 评论0 收藏0
  • ES6学习letconst 命令

    摘要:外层作用域不报错正常输出块级作用域与函数声明规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。规定,块级作用域之中,函数声明语句的行为类似于,在块级作用域之外不可引用。同时,函数声明还会提升到所在的块级作用域的头部。 前言:最近开始看阮一峰老师的《ECMAScript 6 入门》(以下简称原...

    番茄西红柿 评论0 收藏2637
  • ES6学习摘要(01)(新人学习

    摘要:入门一前言由于最近本人在学习,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于的新人学习摘要吧。的作用域与命令相同只在声明所在的块级作用域内有效。块级作用域新增方式和实际上为新增了块级作用域。同时,函数声明还会提升到所在的块级作用域的头部。 ECMAScript6/ES6 入门 一、前言 由于最近本人在学习ES6,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于ES6的新人学习摘要吧。...

    dmlllll 评论0 收藏0
  • ES6笔记let && const

    摘要:声明的变量只在其所在的代码块内有效。只要在声明之前使用这些变量,就会报错。在语法上称为暂时性死区有时候,会不经间遇到比较隐蔽的死区,不太容易被发现。不允许重复声明不允许在相同的作用域内声明同一个变量。一旦声明,其值就不能再改变。 let && const let let声明的变量只在其所在的代码块内有效。 { let a = 10; } console.log(a) //R...

    aristark 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<