从函数中访问变量

Sop*_*des 6 javascript jquery scene7

我有一个函数,其中一个值插入到另一个函数中的变量中.

初始化:

当窗口调整大小时,它会触发resizeImage()函数.

$(window).resize(function () {
    resizeImage();
});
Run Code Online (Sandbox Code Playgroud)

调整功能:

此函数使用image-resize类检查每个元素,并通过更改宽度值(来自scene7的动态)添加readjust图像的SRC.

问题是element.attr('src',newSrc); newSrc不存在,因为它存储在sizingMethod()中.

无论如何从sizingMethod()函数中获取变量并将其放在element.attr('src',newSrc)中; .

function resizeImage() {
    $('.image-resize').each(function () {

        var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc;

        var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;

        if ($(window).width() > 1824) {
            sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000');
        } else if ($(window).width() <= 1824 && $(window).width() > 1366) {
            sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824');
        }

        element.attr('src', newSrc);
    });
};
Run Code Online (Sandbox Code Playgroud)

尺寸功能:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){
    sCurrentW = sSrc.match(sRegex);
    sNewW = 'wid=' + sNewWidth;
    sNewSrc = sSrc.replace(sCurrentW, sNewW);
    textWidth = sNewW.replace('wid=', '');
    $(".dsply-screen-size").text($(window).width());
    $(".dsply-image-size").text(textWidth);
}
Run Code Online (Sandbox Code Playgroud)

Fet*_*etz 5

当你使用原语时,你发送的是值而不是引用,所以sNewSrc!= newSrc,所以你对sNewSrc所做的任何更改都不会改变newSrc.

您可以使用以下方法修复代码:


return:返回函数sizingMethod中的值:

if ($(window).width() > 1824) {
    newSrc = sizingMethod(src, regx, currentWidth, newWidth, '2000');
} else if ($(window).width() <= 1824 && $(window).width() > 1366) {
    newSrc = sizingMethod(src, regx, currentWidth, newWidth, '1824');
}
Run Code Online (Sandbox Code Playgroud)

尺寸功能:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewWidth){
    sCurrentW = sSrc.match(sRegex);
    sNewW = 'wid=' + sNewWidth;
    var sNewSrc = sSrc.replace(sCurrentW, sNewW);
    textWidth = sNewW.replace('wid=', '');
    $(".dsply-screen-size").text($(window).width());
    $(".dsply-image-size").text(textWidth);
    return sNewSrc;
}
Run Code Online (Sandbox Code Playgroud)

closure:如果在匿名函数中声明sizingMethod,你也可以访问变量newSrc和其他变量.

function resizeImage() {
    $('.image-resize').each(function () {

        var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc;

        var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;

        if ($(window).width() > 1824) {
            sizingMethod('2000');
        } else if ($(window).width() <= 1824 && $(window).width() > 1366) {
            sizingMethod('1824');
        }

        element.attr('src', newSrc);

        function sizingMethod(sNewWidth){
            currentWidth = src.match(regx);
            var sNewW = 'wid=' + sNewWidth;
            newSrc = sSrc.replace(currentWidth, sNewW);
            textWidth = sNewW.replace('wid=', '');
            $(".dsply-screen-size").text($(window).width());
            $(".dsply-image-size").text(textWidth);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

object:如果使用对象/数组而不是基元作为参数

function resizeImage() {
    $('.image-resize').each(function () {

        var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc = {};

        var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;

        if ($(window).width() > 1824) {
            sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000');
        } else if ($(window).width() <= 1824 && $(window).width() > 1366) {
            sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824');
        }

        element.attr('src', newSrc.src);
    });
};
Run Code Online (Sandbox Code Playgroud)

尺寸功能:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){
    sCurrentW = sSrc.match(sRegex);
    sNewW = 'wid=' + sNewWidth;
    sNewSrc.src = sSrc.replace(sCurrentW, sNewW);
    textWidth = sNewW.replace('wid=', '');
    $(".dsply-screen-size").text($(window).width());
    $(".dsply-image-size").text(textWidth);
}
Run Code Online (Sandbox Code Playgroud)