作用域

作者: 小雪洁 | 来源:发表于2020-04-27 22:35 被阅读0次
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>环境与作用域</title>
    </head>
    <body>
    </body>
    <script>
//全局环境是不会被回收的,除非人为回收或者关闭浏览器
//函数里面的变量默认是不能在函数外面用的,函数在执行结束后就会释放它的环境,
//函数每调用一次就给它分配一个环境(内存地址),每次都是不同的
//函数调用前不会给它分配内存空间,调用的时候给它分配,执行完就立马释放这块内存
        function hd(){
            let n=1;
            function sum(){
                console.log(++n);
            }
            sum();
        }
        let a=hd;
        a();//2
        a();//2
//但是如果把sum返回去,函数在执行完hd这块内存就不会立马释放,
    function hd0(){
        let n=3;
        return function sum0(){
            console.log(++n);
        };
    }
    let b=hd0();
    console.log(b);//b接到的是sum0这个函数体
    b();//4
    b();//5
    let c=hd0();
    c();//4
    c();//5
    function hd1(){
        let n=3;
        return function sum1(){
            let m=1;
            function show(){
                console.log(++m);
            }
            show();
        };
    }
    let d=hd1();
    d();//2
//并没有累加,也就是说在hd1调用的时候,返回了sum函数,因为sum()是定义在hd1中的
//所以内存会把hd1的执行环境保存着,但是在show()是定义在sum中的,在sum的执行环境里
//show是在调用的时候才会给它分配空间,不调用依旧是不给它分配
//但是如果把show()函数return回去,则在内存中就会给它保留着这个环境了
    d();//2
    </script>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>构造函数中的作用域</title>
    </head>
    <body>
    </body>
    <script>
//构造函数里使用this.functionName=function(){}定义的方法,会在内存中保存着其执行环境,
//再次执行的时候是从上次的执行结果基础上继续执行
        function HD(){
            let n=1;
            this.sum=function(){
                console.log(++n);
            };
        }
        //等同于
        function HD0(){
            let n=1;
            function sum(){
                console.log(++n);
            };
            return {sum}
        }
        let a=new HD();
        a.sum();//2
        a.sum();//3
        let b=new HD();
        b.sum();//2
        b.sum();//3
        let c=new HD0();
        c.sum();//2
        c.sum();//3
    </script>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>块作用域</title>
    </head>
    <body>
    </body>
    <script>
//块级作用域对let和const声明的变量有效,var声明的变量没有块级作用域
        {
            let a=3;
            //console.log(a);//3
            var b=2;
            //console.log(b);//2
        }
        //console.log(a);//报错 let和const定义的变量都有块级作用域
        console.log(b);//2使用var定义的变量没有块级作用域

    </script>
</html>

相关文章

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • [ES6]1.1作用域

    作用域 全局作用域(global/window) 函数作用域/局部作用域(function) 块状作用域({}) ...

  • C - 作用域

    C - 作用域 一个 C 变量的作用域可以是: 块作用域 函数作用域 函数原型作用域 或 文件作用域 作用域描述程...

  • JavaScript作用域分类

    JavaScript作用域分类全局作用域局部作用域函数作用域块级作用域catchwithlet 和 const 什...

  • JS基础---05作用域

    JavaScript基础 1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作...

网友评论

    本文标题:作用域

    本文链接:https://www.haomeiwen.com/subject/teppwhtx.html