zoukankan      html  css  js  c++  java
  • js函数调用与声明 (for时注意)

    可以的:

    test();  // 直接function 方式声明的函数可以直接调用,后声明

    function test(){}

    aa();   //error  var 方式声明的函数需先声明后调用
    var aa = function(){}

    $(function () {
        var arr = [];
        var tmp = 0;
        $('.for_loop_event').each(function () {
            arr.push(this);
        });
    
        for (var i = 0; i < arr.length; i++) {
            arr[i].addEventListener('click',function (e) {
                console.log(i);         // 点击 输出5 5 5 5 5
                //tmp = tmp+ i; console.log(tmp);       // 或者用this.xx access
            });
        } 
    
        for (var i = 0; i < arr.length; i++) {
            test(i);
        }
    
        function test(i) {
            console.log('test');
            arr[i].addEventListener('click',function (e) {
                console.log(i); // 点击 1,2,3,4,5
            });
        }  
    });

     参考:

    因为闭包!

    所以也可以这样做

    for (var i = 0; i < arr.length; i++) {
        (function (i) {
            arr[i].addEventListener('click',function (e) {
                console.log(i);         // 输出 1 2 3 4 5
            });
        }) (i);                
    } 

    JavaScript doesn't have block scope (for, if, while etc.)

    http://stackoverflow.com/questions/19586137/addeventlistener-using-for-loop-and-passing-values/19586183

    或者也可以使用 es6的新特性 let:

    var a = [];
    for( let i = 0;i<10;i++){
      a[i] = function(){
        console.log(i);
      }   
    }
    
    a[6]();  // echo  6
    //如果for时的i 用var 声明  // 10
  • 相关阅读:
    Spring>autoWire
    hibernate>多对多关联映射
    Hibernate>一级缓存
    Hibernate>component映射和复合主键映射
    Struts2>类型转换
    hibernate>继承
    hibernate>悲观锁和乐观锁
    Spring>Bean的作用域
    Struts2>defaultactionref
    数据库的隔离级别
  • 原文地址:https://www.cnblogs.com/isdom/p/webclips049.html
Copyright © 2011-2022 走看看