事件绑定——在闭包中捕获变量

Event binding - Capture variable in a closure

本文关键字:变量 闭包 绑定 事件      更新时间:2023-09-26

我想弄清楚为什么它提醒'二'是否我点击按钮'一'或'二'。

<button id="one"> One </button>
<button id="two"> Two </button>
$(function(){
    var some_arg = 'one';
    $("#one").click(function(){
        my_alert(some_arg);
    });
    some_arg = 'two';
    $("#two").click(function(){
        my_alert(some_arg);
    });
});
function my_alert(test){
    alert(test);
}

谢谢!

<

Jsfiddle演示/strong>

因为您似乎想使用一些闭包,所以也可以这样做:

$(function () {
    var some_arg = 'one';
    (function (some_arg) { // some_arg is local, no more referring to outter scoped one
        $("#one").click(function () {
            my_alert(some_arg); 
        });
    })(some_arg);
    some_arg = 'two';
    (function (some_arg) { // some_arg is local, no more referring to outter scoped one
        $("#two").click(function () {
            my_alert(some_arg);
        });
    })(some_arg);
});

——演示——

some_arg设置为'two'后触发点击事件

$(function(){
    var some_arg = 'one';
    $("#one").click(function(){
        my_alert(some_arg);
    });
    $("#two").click(function(){
        some_arg = 'two';
        my_alert(some_arg);
    });
});

把你的代码改成这个DEMO

$(function(){
    var some_arg;//create a variable
    $("#one").click(function(){
        some_arg = 'one'; // assign 'one' to our variable  some_arg to 
        my_alert(some_arg);
    });

    $("#two").click(function(){
        some_arg = 'two';// assign 'two' to our variable  some_arg to 
        my_alert(some_arg);
    });
});
function my_alert(test){
    alert(test);
}

来源:闭包

$(function(){
    var some_arg;
    $("#one").click(function(){
        some_arg = 'one';
        my_alert(some_arg);
    });
    $("#two").click(function(){
        some_arg = 'two';
        my_alert(some_arg);
    });
});