zoukankan      html  css  js  c++  java
  • JS进阶作用域块作用域

    在ES6之前,JS中的作用域只有全局作用域和函数作用域。ES6引入了块作用域,使得开发和维护都变得更简单,在这里对ES6的块作用域进行简单介绍。

    let

    // 示例1
    for (var i= 0; i<10; i++) {
      console.log(i);
    }
    console.log(i);// 10
    
    // 示例2
    for (let i= 0; i<10; i++) {
      console.log(i);
    }
    console.log(i);// Uncaught ReferenceError: i is not defined
    

    在ES5时代,只能使用var定义变量,由于没有块作用域,示例1中的变量i在循环结束后可以在全局作用域中访问,很显然变量i污染了全局作用域。

    ES6引入了let关键字定义变量,它可以将变量绑定到所在的任意作用域中,实现块作用域。

    块作用域可以代替立即执行函数(IIFE)

    (function(){
      var i = 1;  
    })();
    console.log(i);//ReferenceError: i is not defined
    

    let不会进行声明提升,并且不能重复声明

    console.log(i); // ReferenceError: i is not defined
    let i = 1;  
    

    const

    ES6引入了const关键字定义一个常量,它也可以创建块作用域。修改常量值会引起错误。

    const不会进行声明提升,并且不能重复声明

    console.log(i); // ReferenceError: i is not defined
    const i = 1;  
    

    try-catch

    在ES6之前的环境中,可以使用try-catch语句创建块级作用域。

    // 示例1
    try{
      throw 1;
    }catch(v){
      console.log(v); // 1
    }
    console.log(v); //ReferenceError: v is not defined
    
    // 示例2
    try{
      throw undefined;
    }catch(v){
      v = 1;
      console.log(v); // 1
    }
    console.log(v); //ReferenceError: v is not defined
    
    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    spring属性注入
    spring的bean标签属性
    spring三种实例化bean的方式
    测试环境部署
    sql server将字符串转换为 uniqueidentifier 时失败
    mybatis parametertype 多个参数
    ORACLE-023:令人烦恼的 ora-01722 无效数字
    PostMan使用教程
    sqlserver复制表数据到另一个表
    to_number()函数的用法
  • 原文地址:https://www.cnblogs.com/yesyes/p/15351954.html
Copyright © 2011-2022 走看看