jQuery combining 2 bind functions (TypeError: a is undefined)

jQuery combining 2 bind functions (TypeError: a is undefined)

请多多指教

我正在尝试通过组合 2 个相似函数的公共部分来编写一个函数。
从这两个函数中,我想得到 "selected1" & "selected2",并在下一个函数 calc.

中使用这些值
var selected;
var selected1;
var selected2;

$( '.type1' ).bind('change', function () {
    var values = [];
    $( 'input.type1:checkbox:checked' ).each(function ( _, el ) {
        values.push( base64decode( $( el ).data( 'val' ) ) );
        if ( values.length > 1 ) {
            values[0] = $.map(values[0], function (val, i) {
                return values[0][i] | values[1][i];
            });
            values.splice(1,1);
        }
    });
    selected1 = result;
    calc();
});

$( '.type2' ).bind('change', function () {
    var values = [];
    $( 'input.type2:checkbox:checked' ).each(function ( _, el ) {
        values.push( base64decode( $( el ).data( 'val' ) ) );
        if ( values.length > 1 ) {
            values[0] = $.map(values[0], function (val, i) {
                return values[0][i] | values[1][i];
            });
            values.splice(1,1);
        }
    });
    selected2 = result;
    calc();
});

function calc () {
    var selected3 = $.map(selected1, function (val, i) {
        return selected1[i] & selected2[i];
    });
    selected = base64encode( selected3 );
    overlays();
};

当我像上面这样写的时候,selected1&2 都被定义为全局变量,所以函数 calc 可以工作。

但是,它不适用于我的重写代码。 firebug 表示 "TypeError: a is undefined"。 这是我的代码:

function tab (checkedTab, selected) {
    var values = [];
    checkedTab.each(function ( _, el ) {
        values.push( base64decode ($( el ).data( 'val' ) ) );
        if ( values.length > 1 ) {
            values[0] = $.map(values[0], function (val, i) {
                return values[0][i] | values[1][i];
            });
            values.splice(1,1);
        }
    });
    selected = values[0];
};
$( '.type1' ).bind('change', function () {
    tab ($( 'input.type1:checkbox:checked' ), 'selected1');
    calc();
});
$( '.type2' ).bind('change', function () {
    tab ($( 'input.type2:checkbox:checked' ), 'selected2');
    calc();
});

有人可以告诉我为什么我的代码不起作用吗?

非常感谢您的评论,彼得。
调试变量后,终于可以了!
这可能不是最好的方法,但我会post我重写的代码作为参考。

var values;

function tab (checkedTab) {
    values = [];
        checkedTab.each(function ( _, el ) {
        values.push( base64decode ($( el ).data( 'val' ) ) );
        if ( values.length > 1 ) {
            values[0] = $.map(values[0], function (val, i) {
                return values[0][i] | values[1][i];
            });
            values.splice(1,1);
        }
    });
    return values[0];
};
$( '.type1' ).bind('change', function () {
    selected1 = tab ($( 'input.type1:checkbox:checked' ));
    calc();
});
$( '.type2' ).bind('change', function () {
    selected2 = tab ($( 'input.type2:checkbox:checked' ));
    calc();
});