Javascript 变量范围js-返回初始赋值,而不是更改

Javascript 变量范围js-返回初始赋值,而不是更改,javascript,variables,scope,return-value,Javascript,Variables,Scope,Return Value,有下一个脚本: function clicker(){ var linkId = "[id*=" + "link]"; var butnId='initial'; $j(linkId).click(function(){ var postfix = $j(this).attr('id').substr(4); butnId = '#' + 'butn' + postfix; }); return butnId; } 函

有下一个脚本:

function clicker(){
var linkId = "[id*=" + "link]";
var butnId='initial';       
    $j(linkId).click(function(){
        var postfix = $j(this).attr('id').substr(4);
        butnId = '#' + 'butn' + postfix;
        });

return butnId;

} 
函数输出为“初始”值


如何在click函数中转换变量butnId后返回其实际值?

传递给
click
的函数中的代码在单击元素之前不会执行

您可能需要
clicker
的调用者传入一个回调函数,然后该函数可以由click函数调用(假设您不想将所需操作硬编码到click函数本身中):-

可能会被重构为:-

function clicker(callback){
var linkId = "[id*=" + "link]";
    $j(linkId).click(function(){
        var postfix = $j(this).attr('id').substr(4);
        callback('#' + 'butn' + postfix);
        });    
} 

从您的代码来看,不清楚您在这里真正想要实现什么。当点击器返回时,它将不会执行后缀部分。它所做的只是说,当点击某个链接时,应该执行该代码。没有用于转换值的循环。你想让点击器实现什么?我想从点击的链接中提取后缀,在此基础上我将知道下一步应该点击什么链接-它的ID是butnId。从Java的角度来看,当我初始化变量时,在循环中转换它,它的值就改变了。因此,我将尝试下面的建议。谢谢。我想补充一点,我在UI上执行点击操作,butnId确实发生了变化,但它作为函数输出是不变的,所以它不会超出点击功能的范围,并且保持不变。
function clicker(callback){
var linkId = "[id*=" + "link]";
    $j(linkId).click(function(){
        var postfix = $j(this).attr('id').substr(4);
        callback('#' + 'butn' + postfix);
        });    
}