zoukankan      html  css  js  c++  java
  • JavaScript的闭包

    函数体内部的变量都可以保存在函数作用域内。 -----闭包(函数变量可以被隐藏于作用域链之内,因此看起来是函数将变量“包裹”了起来)

    当一个函数嵌套另外一个函数,外部函数将嵌套的对象作为返回值返回。往往就时闭包了。理解闭包首先了解嵌套函数的词法作用域规则。

    var scope = 'global scope';
     function checkscope(){
         var scope = 'local scope';
         function f(){return scope};
         return f;
     }
     checkscope()()
    //"local scope"

    特性:可以捕捉到局部变量(和参数),并一直保存下来,看起来像这些变量绑定到了在其中定义它们的外部函数。

    var unique = (function(){
         var conter = 0;
         return function(){return conter++}
     }());
     unique()

    利用闭包实现私有属性存取器方法(私有状态共享的通用做法):

     function addPrivateProperty(o,name,predicate){
         var value;
         o[`get${name}`] = function(){return value;};
         o[`set${name}`] = function(v){
             if(predicate && !predicate(v))
                 throw Error(`set ${name}:invalid value ${v}`)
             else 
                 value = v;
         }
     }
     var o = {};
     addPrivateProperty(o,'Name',function(x){return typeof x == "string"});
     o.setName("Frank");
     console.log(o.getName());

    在同一个作用域链中定义两个闭包,这个两个闭包共享同样的私有变量或者变量,这是一种非常重要的技术。
    重要点:闭包内无法直接访问外部函数的参数数组,除非外部函数将参数数组保存在另外一个变量中:

    var outerArguments = arguments;

    var that = this;

  • 相关阅读:
    WPF 自定义CheckBox样式
    WPF中的动画——(二)From/To/By 动画
    C# 异步编程
    C# 二维码生成 ( QRCoder )
    ASP.NET Core中的依赖注入(2):依赖注入(DI)
    从零搭建分布式文件系统MinIO比FastDFS要更合适
    WPF : ControlTemplate和DataTemplate的区别
    wpf 中 theme 的使用 和 listview 模板的使用.
    wpf 中的DataTemplate 绑定控件
    HTTP状态码含义
  • 原文地址:https://www.cnblogs.com/tangjiao/p/8984474.html
Copyright © 2011-2022 走看看