开发者问题收集

从浏览器控制台调用时未定义 Javascript 函数

2021-06-23
487
var ready = function ready(callback) {
      if (document.readyState != "loading") callback();else document.addEventListener("DOMContentLoaded", callback);
    };
    ready(function () {
      "use strict"; 
      var callBstApi = function callBstApi(params) {
        fetch("http://localhost:3000/api/v1/myApi", {
          method: 'POST',
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify(params)
        }).then(function (data) {
          console.log(JSON.stringify(params));
        }).catch(function (error) {
          console.log('test is cancelled!');
        });
      };
    });
    

当我调用 callBstApi(myParams) onload 时,它可以工作,但如果我从浏览器控制台调用该函数,它会显示以下错误 Error!!!

我必须用 vanilla js 编写脚本。

1个回答

进一步阐述我的评论: callBstApi 在您的控制台中不可用的原因是它不存在于全局范围内。该函数在您的 ready 函数内定义,因此无法访问。为了避免这种情况,您需要将该方法公开到全局窗口范围。这可以通过这样做来实现:

window.callBstApi = ...

您现在可以在全局范围内访问 callBstApi (带或不带 window. 前缀,这完全是可选的)并按如下方式调用它:

callBstApi(myParams);

// If you want to be pedantic, you can do:
window.callBstApi(myParams);

p/s:唯一的风险是,如果该键已经在 window 对象中找到,您将覆盖那里的所有内容。

Terry
2021-06-23