zoukankan      html  css  js  c++  java
  • 关于JavaScript闭包的小问题

    怎么说,闭包大体也就是作用域的问题。
    闭包的一个用途是用于模块化,保护函数体内的私有变量,如:

     1 var foo = function(){
     2     var _num = 1;
     3     var sayHello = function(){
     4         console.log('hello');
     5     };
     6     var getNum = function(){
     7         return _num;
     8     };
     9     return {
    10         getNum : getNum ,
    11         sayHello : sayHello
    12     }
    13 }
    14 var num = foo().getNum();
    15 console.log(num); //1
    16 foo().sayHello(); //hello

    模块化的东西不多说,下面说之前一直不解的问题:

    1 var $div = $("div");
    2 for(var i = 0; i < $div.length;i++){ //length = 4
    3     $div[i].onclick = function(){
    4         console.log(i); // 4 4 4 4 (模拟按次序点击,触发)
    5     }
    6 }

    原因在于log的参数i为形参,只有在onclick事件触发时,才将i赋值。

    简单修改,通过立即执行函数即可将i进行绑定:
    1 var $div = $("div");
    2 for(var i = 0; i < $div.length;i++){ //length = 4
    3     $div[i].onclick = (function(i){
    4         console.log(i); // 1 2 3 4 (for循环自行触发)
    5     }(i));
    6 }
     
  • 相关阅读:
    路由
    客户端如何调用
    第一个简单的DEMO
    Web API初印象
    项目开发中经常使用的缓存
    EF的Model First
    如何计算代码的运行性能
    使用Obsolete特性来标记方法过时或弃用
    nodeJs实现文件上传,下载,删除
    node 部署教程二
  • 原文地址:https://www.cnblogs.com/zhaoww/p/5774060.html
Copyright © 2011-2022 走看看