• 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;

  • 相关阅读:
    tcp/ip网络分层 紫翼龙王
    软件防火墙之iptables/netfilter概念篇(一) 紫翼龙王
    linux cpu负载详解 紫翼龙王
    ThinkInJava4读书笔记之第五章隐藏实施过程
    ThinkInJava4读书笔记之第六章类继承
    工具类sql操作工具类
    python 面向对象
    python 初识
    python 函数,内置函数
    python 正则,os,sys,hashlib模块
  • 原文地址:https://www.cnblogs.com/tangjiao/p/8984474.html
Copyright © 2020-2023  润新知