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

    //JavaScript闭包
    
    var array = [1, 2, 3];
    
    var funcs = new Array(3);
    
    for (var i in array) {
    
        var tmp = array[i];
    
        funcs[i] = function () {
    
            return tmp;
    
        }
    
    }
    
     
    
    alert(funcs[0]());

    会输出3!原因是JavaScript中函数中的所有变量声明作用域都是在整个函数中的。因此这个tmp就是这个函数域中的全局变量,当for循环运行完毕后,tmp就是3了。funcs数组中的所有函数对象返回值都会是3。

    那么怎样解决JavaScript的这个问题呢?

    我们可以利用另一个辅助函数来返回闭包函数。把原来函数域中的全局变量tmp传入到另一个函数中后,在这个函数中返回另一个函数来返回这个tmp变量(这句话有点绕推荐直接看下面代码)。这样做的意义是,之前函数中的tmp变量现在被局部化了。

    完整代码:

    //JavaScript闭包
    
    function makeFunc(item) {
    
        return function () {
    
            return item;
    
        }
    
    }
    
     
    
    var array = [1, 2, 3];
    
    var funcs = new Array(3);
    
    for (var i in array) {
    
        var tmp = array[i];
    
        funcs[i] = makeFunc(tmp);
    
    }
    
     
    
    alert(funcs[0]());

    这样就会输出1了!

  • 相关阅读:
    cmder
    navicat 查询保存的位置
    git使用
    怎么保证测试用例的覆盖率
    python3.7-初学篇-19-良好的习惯
    python基础篇-使用list和tuple
    python基础篇-字符串和编码
    python基础篇-输入和输出
    python3.7-初学篇-21
    python3.7-初学者-20
  • 原文地址:https://www.cnblogs.com/silentjesse/p/3545819.html
Copyright © 2011-2022 走看看