Javascript 内部函数引用上次调用的参数

Javascript 内部函数引用上次调用的参数,javascript,jquery,closures,Javascript,Jquery,Closures,似乎每次调用edit()函数都会覆盖此函数中的变量 function edit(el) { $edit_img = $(el); $btn = $('<img width="15" height="15" src="images/add.png">'); $edit_confirm = $edit_img.parent(); $edit_confirm.append($btn); function restore_span() {

似乎每次调用edit()函数都会覆盖此函数中的变量

function edit(el)
{
    $edit_img = $(el);
    $btn = $('<img width="15" height="15" src="images/add.png">');

    $edit_confirm = $edit_img.parent();

    $edit_confirm.append($btn);

    function restore_span()
    {
        $edit_img.show();

        $btn.remove();
    }

    $btn.click(restore_span);

    $edit_img.hide();
}
功能编辑(el)
{
$edit_img=$(el);
$btn=$('');
$edit_confirm=$edit_img.parent();
$edit\u confirm.append($btn);
函数还原_span()
{
$edit_img.show();
$btn.remove();
}
$btn.单击(恢复跨度);
$edit_img.hide();
}
从这个onclick处理程序调用编辑函数:

<img src = "images/edit-icon.png" width = "15px" height = "15px" onclick="edit(this)" />

对多个图像调用edit()时,最近创建的图像(如上面的图像)将被删除


如何修改此函数以修复此行为?

使用
var$btn
而不是
$btn
(以及其他变量)

当你写作时
var$btn
-创建局部变量 如果没有
var
,则为全局


因此,在您的情况下,每次替换这些变量时(例如,还原功能中使用的
$edit\u img

使用
var$btn
,而不是
$btn
(以及其他变量)

当你写作时
var$btn
-创建局部变量 如果没有
var
,则为全局


因此,在您的例子中,每次替换这些变量时(例如,还原函数中使用的
$edit\u img

与PHP不同,JavaScript中的变量不是块或函数的隐式局部变量

function edit(el)
{
    $edit_img = $(el);
    $btn = $('<img width="15" height="15" src="images/add.png">');

    $edit_confirm = $edit_img.parent();

    $edit_confirm.append($btn);

    function restore_span()
    {
        $edit_img.show();

        $btn.remove();
    }

    $btn.click(restore_span);

    $edit_img.hide();
}
要将变量声明为函数作用域的局部变量,请使用:

功能编辑(el){
var$edit\u img=$(el),//与逗号一起使用
$btn=$('');
var$edit\u confirm=$edit\u img.parent();//或多次
$edit\u confirm.append($btn);
$btn.单击(函数还原){
$edit_img.show();
$btn.remove();
});
$edit_img.hide();
}

与PHP不同,JavaScript中的变量不是块或函数的隐式局部变量

function edit(el)
{
    $edit_img = $(el);
    $btn = $('<img width="15" height="15" src="images/add.png">');

    $edit_confirm = $edit_img.parent();

    $edit_confirm.append($btn);

    function restore_span()
    {
        $edit_img.show();

        $btn.remove();
    }

    $btn.click(restore_span);

    $edit_img.hide();
}
要将变量声明为函数作用域的局部变量,请使用:

功能编辑(el){
var$edit\u img=$(el),//与逗号一起使用
$btn=$('');
var$edit\u confirm=$edit\u img.parent();//或多次
$edit\u confirm.append($btn);
$btn.单击(函数还原){
$edit_img.show();
$btn.remove();
});
$edit_img.hide();
}

谢谢。在我学习jQuery之前,我总是使用var,但从那以后我就完全忘记了。谢谢。在我学习jQuery之前,我总是使用var,但从那以后我就完全忘记了使用var。