0

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

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

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

我们不能在tap匿名函数中使用this.name ,因为this将不再引用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 );
            }
        });
4

0 回答 0