在函数中处理变量的范围

时间:2016-02-14 15:20:16

标签: jquery function scope

我已经有了这个功能来重建链接的一些输入(我需要摆脱空格,逗号,特殊字符 - 那种东西):

function linkbuilding(a) {
    if (jQuery.inArray(' ',a)){
        a = a.replace(/ /g, "-");
    }

    if (jQuery.inArray(',',a)){
        a = a.replace(/,/g, "");
    }

    if (jQuery.inArray('ë',a)){
        a = a.replace(/ë/g, "e");
    }

    console.log(a + " value");
}

var plantNameLinkBuild = jQuery("span.plant-name");
plantNameLinkBuild.each(function(){
    var lnkName = jQuery(this).text().trim();
    linkbuilding( lnkName );
    jQuery(this).wrap('<a href="../kruiden-a-z/'+lnkName+'"></a>');
});

所以函数linkbuilding在lnkName(linkbuilding(lnkName))上运行,来自console.log,我看到值发生了变化。

但它没有更新lnkName变量原始输入 - 我没有得到更正的值。所以我最后仍然得到了与空格等的链接。

我哪里错了?我怎样才能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

function linkbuilding(a) { if (jQuery.inArray(' ',a)) { a = a.replace(/ /g, "-"); } if (jQuery.inArray(',',a)){ a = a.replace(/,/g, ""); } if (jQuery.inArray('ë',a)){ a = a.replace(/ë/g, "e"); } console.log(a + " value"); return a; } var plantNameLinkBuild = jQuery("span.plant-name"); plantNameLinkBuild.each(function(){ var lnkName = jQuery(this).text().trim(); lnkName = linkbuilding( lnkName ); jQuery(this).wrap('<a href="../kruiden-a-z/'+lnkName+'"></a>'); }); 变量是按值传递的,而不是通过引用传递的,因此您需要使函数返回新值,然后使用函数的结果更新原始变量:

var lnkName = linkbuilding(jQuery(this).text().trim());

或者只是:

linkbuilding()

另请注意,您可以使用正则表达式简化function linkbuilding(text) { return text.replace(/,/g, '').replace(/ë/g, 'e').replace(/\s+/g, '-'); } 函数:

CREATE OR REPLACE PACKAGE BODY VISIONEMPLOYEES AS
     PROCEDURE Employees(
        p_id IN NUMBER,
        p_ref_cursor OUT sys_refcursor )
        AS
        BEGIN

       OPEN p_ref_cursor FOR
       SELECT id, name, age FROM emp WHERE id = p_id;

        EXCEPTION
         WHEN OTHERS THEN
          ROLLBACK;
          RAISE;
      END Employees;
    END VISIONEMPLOYEES;

Working example