js传参问题

A方法为:

jquery('.manage_payment_btn').click(function() {
    var btnType = '';
    var isTrial = 0;
    //一些其他代码
});

B方法为:

jquery('#manage').click(function() {
    requestToken();
});

如果我想在B方法requestToken函数传入 A 方法中的两个变量做参数,类似如:

requestToken(btnType,isTrial);

除了将这两个变量定义为全局变量 还是有什么方法 ?

阅读 3k
4 个回答

既然你的 B 结果依赖于 A 结果,那么 A 和 B 肯定是有一定关联的。当然用全局变量来表示这个关联并不是一个很好的事情,可以试试采用事件的方式。

$(".manage_payment_btn").click(function() {
    var btnType = "";
    var isTrial = 0;

    $(this).data("someData", {
        btnType: btnType,
        isTrial: isTrial
    });
    //一些其他代码
});

$("#manage").click(function() {
    var data = $(".manage_payment_btn").data("someData");
    requestToken();
});

当然 $(".manage_payment_btn") 不一定是一个对象,而可能是多个……那么可以考虑换个方式。

var manager = {
    btnType: "",    // 初始值
    isTrail: 0,     // 初始值

    payment: function(type, isTrail) {
        this.btnType = type;
        this.isTrail = isTrail;
    },

    manage: function() {
        // this.btnType
        // this.isTrail
        requestToken();
    }
};


$(".manage_payment_btn").click(function() {
    manager.paymeht("", 0);
    //一些其他代码
});

$("#manage").click(manager.manage.bind(manager));

这个代码里,其实有一个全局的 manager,但是它封装了相关的逻辑,并不是零散的全局变量,会比零散的全局变量好管理。

A方法中的两个变量是只有在点击之后才会声明,而且他们的作用域也就局限在了匿名函数中。

A 和 B 两个点击事件是否有关联呢,还是就是独立的两个事件监听?

如果是独立的话,还是做全局变量比较靠谱,可以声明一个对象字面量,这样进行属性的修改即可。

还有一点就是,如果 requestToken() 这个函数和 上面的两个事件监听不在同一作用域或者requestToken()是第三方必须传递参数,也可以通过一个全局的对象穿进去。

或者将这两个需要的参数作为属性在A方法调用时添加到id=manage标签中,调用B方法时候取自己的属性值即可

可以考虑用一个闭包存储,其实和全局变量差不多。A方法中的局部变量在调用之后,会被释放。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题