理解JavaScript匿名函数,变量和作用域

时间:2013-02-05 00:03:20

标签: javascript jquery

我们试图理解JavaScript匿名函数中的变量作用域。

此代码只需要在Webkit浏览器中工作,因为它适用于PhoneGap应用程序。

考虑到下面的代码块, all_packs 中每个项目的 setTimeout 的参数总是相同,或者 pack_name的值是否更改(因为它在jQuery循环的每次迭代中都会发生变化)会影响参数吗?换句话说,每个新行应与 all_packs 中的其他项目相关联。这是使用匿名函数的正确方法,还是某些行最终会引用相同的名称?

我们无法在点击匿名函数中使用 this.name ,因为将不再引用中的项目all_packs 即可。因此,我们首先将名称隐藏在 pack_name

假设 TAP_DELAY 是在其他地方设置的常量, start_work 是有效的函数,而 all_packs 是一个对象数组。

    // Load each pack
    $( all_packs ).each( function(index) {              
            // Set vars
            var pack_name = this.name;
            var row = $( '#templates .row' ).clone( true );

        // Append new row
        $( '#test' ).append( row );

            // Valid pack?
            if ( this.valid ) {             
                // Configure for tap
                row.on( 'tap', function() {
                                setTimeout( start_work, TAP_DELAY, pack_name );             
                });
            } else {
                            setTimeout( start_work, TAP_DELAY, this.name );
            }
        });

0 个答案:

没有答案