Javascript函数没有调用作为参数传入的函数

时间:2015-06-16 11:22:31

标签: javascript jquery

我正在尝试将一个函数传递给另一个函数,以便我可以在ajax调用完成时调用它,但是我得到一个错误,说我要调用的函数不是函数。

File1(首先加载)

function functionOne() {
    //Some Code
}

File2(已加载第二个并包含ajax调用)

function functionTwo(functionOne) {
    functionOne();
}

functionTwo();

我收到了TypeError: functionOne is not a function

的控制台错误

我的问题有两个:

  1. 为什么functionOne超出了第二个函数的范围?
  2. 这是确保在运行我的第一个功能代码之前完成ajax调用的最佳方法吗?

1 个答案:

答案 0 :(得分:2)

functionTwo中,当您将其声明为参数时,您会隐藏functionOnefunctionTwo中的代码只能看到这个新变量,而不是具有相同名称的全局变量。

但是你的方法是错误的,它不会确保你正在寻找的执行顺序。

jQuery的ajax函数返回promise,这是一种处理异步函数的方法,并且在ajax调用完成后执行某些函数。

如果您希望functionTwo启动ajax调用然后调用functionOne,您可以这样做:

function functionOne() {
}

function functionTwo() {
    return $.ajax({ // don't forget the return
       // many parameters here
    }).then(function(data){
        // use the data here
    });
}

functionTwo().then(functionOne);

这确保仅在functionOne中启动的ajax调用完成后才调用functionTwo

如果你想使用老式的方式并将函数作为参数传递,可以这样做:

function functionOne() {
}

function functionTwo(callback) {
    $.ajax({
       // many parameters here
    }).then(function(data){
        // use the data here
    }).then(callback);
}

functionTwo(functionOne);

但是2015年,您最好开始考虑延期和承诺;)