当前位置: 首页 > news >正文

js变量作用域和闭包的示例

<script>
        /*
      js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量
            
      闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什么时候会用这个闭包,然后这个资源会一直占据内存,造成内存泄漏
     */

        /*1 --函数内部可以访问外部的变量*/
        /*var i = 10;

        function test() {
            console.log(i);
        }
        test();*/

        /*2  在函数外部,我们就不能访问函数内部的变量,不然会报变量没有被定义*/
        /*function test() {
            var j = 20;
        }
        console.log(j);*/    //test.html:19 Uncaught ReferenceError: j is not defined

        /*3  函数的嵌套--这个a函数就能访问test函数的j变量*/
        /*function test() {
            var j = 5;

            function a() {
                console.log(j);
            }
            a();
        }
        test();*/    //5

        /*4*/
     /* function test() {
            
            if(false) {
                var i = 5;
            } else {
                j = 10;
            }
            //i--undefined 是没有被赋值而已    j--10
            //test.html:42 Uncaught ReferenceError: k is not defined 这就是没有定义--报错

            console.log(i+"-->"+j +"-->"+k);
        }
        test();*/

        /*5  -- 这里 在执行的过程中,会将test()这个函数前置,但是在调用它的时候却不会找到j,因为j是在后面定义的*/    
        /*test();    //undefined
        var j = 10
        function test() {
            console.log(j);
        }*/

        /*6*/
        /*test();    //返回 undefined
        var k = 200;
        function test() {
            console.log(k);
        }*/

        /*7*/
        /*
        var k;
        test();        //undefined
        k = 200;
        function test() {
            console.log(k);
        }
        */

        /*其实例子6和7是一个意思,都是变量定义了,但是没被赋值,执行test()的时候,都返回undefined*/

        /*9面试题:函数前面加一个波浪线*/
        /*var j = 100;
        ~(function() {
            console.log(j);
        })();    //返回100
        */

        /*10 函数前面没有波浪线的情况*/
        /*var k = 5;
        (function() {
            console.log(j);
        })();*/
        //返回  --》test.html:89 Uncaught ReferenceError: j is not defined

        //函数前面加波浪线,此时会将函数转化为一个表达式 输出  所以这个波浪线很重要

        /*11面试题:*/
        /*var i = 10;
        function test() {
            console.log(i);
            var i;
        }
        test();    */
        // 返回undefined   这里的后面的var i;这条语句会被前置,然后会将外面的全局变量i给覆盖掉,此时这里面的i又没有被赋值,所以,执行test()会返回undefined;  下面12的例子说明这个问题

        /*12*/
        /*var j = 20;
        function test() {
            var j;
            console.log(j);
            j = 5;
            
        }
        test();    *///返回undefined  和11是一样的,这里在函数内部定义了j 直接把外部的j给覆盖掉了,然后赋值操作又在console语句的后面,所以会出现undefined

        /*---------------------------分割线----------------------*/
/*13 --这里就是闭包 将我们函数里面的内容用函数的方式返回出去*/ /*function test() { var j = 5; return function() { return j; } } var t = test()(); console.log(t);*/ </script>

 深入理解Js的执行过程很重要

这里有,js如何解析函数的

转载于:https://www.cnblogs.com/xiaqilin/p/6915976.html

相关文章:

  • 王小川分享AI
  • 从源代码编译 Vim 8.0
  • 2015年北京大学软件project学科优秀大学生夏令营上机考试---C:单词翻转面试题...
  • Ubuntu 安装chrome
  • Java:对象的强、软、弱和虚引用
  • Linux转发性能评估与优化(转发瓶颈分析与解决方式)
  • MFC Wizard创建的空应用程序中各个文件内容的解析
  • Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
  • CloudXNS API PHP SDK V1.0,增加DDNS等特性
  • Firefox 表示不计划开发 Windows 10 手机 APP
  • 没有硬件的 WWDC:苹果欲再造生态圈?
  • mongodb.conf配置文件详解
  • Manjaro Linux 17.0.2 pre 5 发布
  • 微软 PowerShell 成为黑客恶意软件传播工具
  • Docker 收购 Tutum,进一步完善其生态布局
  • 【译】JS基础算法脚本:字符串结尾
  • 自己简单写的 事件订阅机制
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • ES6 学习笔记(一)let,const和解构赋值
  • flutter的key在widget list的作用以及必要性
  • HTTP--网络协议分层,http历史(二)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • mysql 数据库四种事务隔离级别
  • Nodejs和JavaWeb协助开发
  • PAT A1017 优先队列
  • React的组件模式
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue--为什么data属性必须是一个函数
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 猴子数据域名防封接口降低小说被封的风险
  • 实现菜单下拉伸展折叠效果demo
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 移动端 h5开发相关内容总结(三)
  • 译米田引理
  • k8s使用glusterfs实现动态持久化存储
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​虚拟化系列介绍(十)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • !!Dom4j 学习笔记
  • # Java NIO(一)FileChannel
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (分布式缓存)Redis哨兵
  • (十六)Flask之蓝图
  • (数据结构)顺序表的定义
  • (转)ORM
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ******之网络***——物理***
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .describe() python_Python-Win32com-Excel