如果函数调用被定义为var,如何调用它

How to invoke function call if it is defined as var?

本文关键字:何调用 调用 函数调用 定义 var 如果      更新时间:2023-09-26

我正在使用JQuery和JSON从服务器获取数据。我定义了getBooksDoneFunc作为变量,因为我需要不仅能调用这个函数一次(当getBooks完成时(。不幸的是,我不能从signInOK内部将getBooksDoneFunc称为window["getBooksDoneFunc"]();。为什么?调用此函数的最佳方式是什么?

function getBooks(){     return $.getJSON( "bookstore.json" );             }
var getBooksDoneFunc = function(json) { 
         $.each(json.books, function(i, json){ .......... });
}
getBooks().done(getBooksDoneFunc);
function signInOK(){
         window["getBooksDoneFunc"]();
}

PS。window["getBooksDoneFunc"]();的想法取自SO答案

更新:

var booksJSON = {};
window["getBooksDoneFunc"](booksJSON);

CCD_ 7必须用参数来调用,然而对CCD_。signInOK是在$(document).ready(function(){ });外部定义的,但在其内部调用。

尝试:

function getBooks(){
  return $.getJSON( "bookstore.json" );
}
window.getBooksDoneFunc = function(json) { 
  $.each(json.books, function(i, json){ .......... });
}
getBooks().done(getBooksDoneFunc);
$(document)ready(function() {
  function signInOK(){
    var booksJSON = {};
    window.getBooksDoneFunc(booksJSON);
  }
});

如果window["getBooksDoneFunc"]();有效,那么getBooksDoneFunc()也有效,使用window的想法是当您想要访问全局函数,但不知道存储在变量中的函数名时。

在您的情况下,放入一个硬编码字符串是没有意义的,只是做getBooksDoneFunc()是一样的,因为您已经在变量中存储了函数self(而不是函数名称的字符串(。

不起作用的是,如果变量不是全局的,请检查范围。

尽管我并不真正理解signInOK((函数,但我会以不同的方式来做这件事。它将如何接收"json"数据。我将重构getBooks函数,并重新思考signInOk函数。这里有一个开始:

function getBooks() {
    $.getJSON("bookstore.json").done(function (json) {
        getBooksDoneFunc(json);
    });
}
var getBooksDoneFunc = function(json) { 
     $.each(json.books, function(i, json){ .......... });
};
...
getBooks();
function signInOK(){
     getBooksDoneFunc("some json data");
}