zoukankan      html  css  js  c++  java
  • Learning JavaScript(0)_Concepts

    作用域,嵌套函数和闭包

    <script type="text/javascript">
    
        function foo(){
            var a = 10;
            function bar(){
                a *= 2;
            }
            bar();
            return a;
        }
    
    </script>

    在这个示例中,a定义在函数foo中,但函数bar可以访问它,因为bar也定义在foo中。当bar在foo中北调用时它可以访问a,但是如果bar是在foo外部被调用呢?

    <script type="text/javascript">
    
        function foo(){
            var a = 10;
            function bar(){
                a *= 2;
                return a;
            }
            return bar;
        }
        
        var baz = foo();
        baz();  // return 20
        baz();  // return 40
        baz();  // return 80
        
        var blat = foo();
        blat();  // return 20
    </script>

    在上述的代码中,所返回的对bar函数的引用被赋予变量baz,函数bar现在是在foo外部被调用,但它依然能够访问a。这是因为JavaScript中的作用域是词法性的,函数式运行在定义它们的作用域中(本例是foo内部的作用域),而不是运行在调用它们的作用域中。只要bar被定义在foo中,它就能访问在foo中定义的所有变量,即使foo的执行已经结束。

    这就是闭包的一个例子,在foo返回后,它的作用域被保存下来,但只有它返回的那个函数能够访问这个作用域。在前边的例子中,baz和blat各自拥有这个作用域以及a的一个副本,而且只有它们自己能够对其进行修改。返回一个内嵌函数式创建闭包最常用的手段,其他的手段还有...?

  • 相关阅读:
    C# 制作卸载文件
    【转】C#窗体飞入飞出的动画效果(Api)
    C# 给picturebox添加滚动条
    js中的各种获取日期
    Java与.NET 的Web Services相互调用
    android源码、博文2
    仿网易新闻app下拉标签选择菜单
    安卓巴士android源码、博文精选1
    android源码 分享1
    优秀源码分享
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3838079.html
Copyright © 2011-2022 走看看