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

    function f1() {
      var n = 999;
      nAdd = function () { n += 1 };
      function f2() {
              alert(n);
             }
      return f2;
    }
    var result = f1();
    result(); // 999
    nAdd();
    result(); // 1000
    闭包示例

    Javascript内存回收机制是这样的:
    “如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数f1被nAdd引用,nAdd又被f1外的result引用,这就是为什么函数f1执行后不会被回收的原因。”

    A closure is an expression (typically a function) that can have free variables together with an environment that binds those variables (that "closes" the expression).
      Since a nested function is a closure, this means that a nested function can "inherit" the arguments and variables of its containing function. In other words, the inner function contains the scope of the outer function.

    (参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope#Nested_functions_and_closures)

    也可以用setInterval或setTimeout来实现闭包

    var outerFunc = function() {
    var foo = 'success!';
    setInterval(function(){alert(foo)}, 3000);
    };
    
    outerFunc();
    setInterval和 setTimeout实现闭包

     

  • 相关阅读:
    MySQL++:Liunx
    MySQL++:liunx 安装 MySQL
    MySQL++:MySQL 相关机制参数解释说明
    linux++:Linux
    linux++:基本操作命令
    coding++:java正则表达式获取指定HTML标签的指定属性值
    mongodb++:mongodb 基本语法
    xml模块
    shelve模块简单用法
    shutil模块
  • 原文地址:https://www.cnblogs.com/Gift/p/3583931.html
Copyright © 2011-2022 走看看