【问题标题】:Cannot access functions inside Javascript function wrapper?无法访问 Javascript 函数包装器中的函数?
【发布时间】:2023-03-16 20:32:01
【问题描述】:

全部,

我的代码因“使用严格”问题而未能通过 JSLint。 正如这里所建议的:Disable "use the function form of use strict" but keep the "Missing 'use strict' statement" warning

如果你用另一个函数包装器包装 javascript 文件中的所有函数,它将解决这个问题。

但是现在,当我从页面调用它们时,我的所有函数都未定义?

(function () {
"use strict";

/**
 * Update the page with a message informing the user
 * an email has been sent to their email address
 * @param details user details (email address)
 */
function shareEmailSent(details) {

    // unhide confirmation message
    $('strong#emailAddress').text(details.email);
    $('#confirmationMessage').removeClass('hide');
}

/**
 * Handle error
 */
function showError() {
    return false;
}

/**
 * Makes a POST request to send the current user
 * an email containing their unqiue share url
 * @param emailList
 */
function sendEmail(emailList) {
    var data = {};
    data.formToken = $('#formToken').val();
    data.emails = emailList;
    $.mooAjax({
        url: "/ajax/share/refer_a_friend_email.php",
        type: "POST",
        data: data,
        dataType: "json",
        error: showError,
        success: function (response) {
            shareEmailSent(response);
        }
    });
}
}());

例如

shareEmailSent 未定义

我怎样才能解决这个问题,同时也通过 JSLint 问题?

谢谢

【问题讨论】:

    标签: javascript jquery closures


    【解决方案1】:

    您可以采取多种方法。按好感降序排列:

    1. 不要从外部调用函数。使用 JavaScript 绑定所有事件处理程序(例如使用 addEventListener
    2. 使用the revealing module pattern
    3. 显式将函数设为全局函数(例如,使用 window.someFunction = someFunction)。

    显然,由于sendEmail 自己调用其他函数,如果您使用第二种或第三种方法,它可能是唯一需要公开的函数。

    【讨论】:

    • 感谢您的帮助。我选择了选项 3。但是现在由于某种原因它破坏了我的函数验证,知道为什么将函数分配给全局变量会影响逻辑吗?
    • 不应该这样做,而且我不知道您所说的“破坏我的功能验证”是什么意思。
    猜你喜欢
    • 2011-06-25
    • 2021-12-08
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2010-11-03
    相关资源
    最近更新 更多