• JS的块级作用域


    今天带来的是 “对《你不知道的js》中块级作用域的总结” 分享:

    1)用with从对象中创建出来的作用域只在with声明中而非外部作用域有效,同时可以访问已有对象的属性并将其添加到已有对象上

    代码demo:

             var obj = {
                 a:1,
                 b:2,
                 c:3
             };
             with(obj){
                 a=3;
                 b=4;
                 c=5;
    d=6; } console.log(obj);
    //3,4,5

    2)try/catch 的catch分句会创建一个块级作用域,其中声明的变量仅在catch内部有效

    代码demo:

            try{
                undefined();//执行一个非法操作来强制制造一个异常
            }
            catch(err){
                console.log(err);//能够正常执行
            }
            console.log(err);//ReferenceError:err is not defined

    3)let用法:可以将变量绑定到所在的任意作用域中(通常是{...}内部)

    代码demo:

             for(i = 1; i < 5; i++){
                 console.log(i);//1 2 3 4
             }
             console.log(i);//5
    
             for(let j = 1; j < 5; j++){
                 console.log(j);//1 2 3 4
             }
             console.log(j);//ReferenceError: j is not defined

    由于let创建的是块级作用域,所以外部无法访问到let声明的变量

    4)const:可以用来创建块作用域变量; 其值是固定的(常量),之后任何试图修改值的操作都会引起错误

    代码demo:

            var foo = true;
            if(foo){
                var a = 2;
                const b = 3;//包含在if中的块作用域常量
                a = 3;//正常
                //b = 4;//错误
                //console.log(b);//TypeError: invalid assignment to const `b'(这里说明其值为常量,之后不能更改其值)
            }
            console.log(a);//3
    console.log(b);//ReferenceError!(这个异常可以证明const创建的块作用域)

     

  • 相关阅读:
    39.前端需要注意哪些SEO
    38.http的几种请求方法和区别
    37.伪元素和伪类的区别
    35.如何实现页面每次打开时清除本页缓存
    Jmeter工具设置中文版(切换显示语言)
    soapui测试http接口
    【C++】《Effective C++》第三章
    【C++】《Effective C++》第二章
    【设计模式】面向对象设计原则
    【设计模式】设计模式概述
  • 原文地址:https://www.cnblogs.com/wccc/p/6718386.html
Copyright © 2020-2023  润新知