回调。尝试运行以下代码时,我的site.js文件出现错误:
function changeSetting(callback) {
var testswitch = document.getElementById("switch");
if (testswitch.checked) {
$.ajax({
type: 'GET',
url: '/api/ct/off/changeSetting',
cache: false,
error: function (jqXHR, textStatus, errorThrown) {
},
success: function (result) {
//No error here
callback();
}
});
}
else if (!testswitch.checked) {
$.ajax({
type: 'GET',
url: '/api/ct/on/changeSetting',
cache: false,
error: function (jqXHR, textStatus, errorThrown) {
},
success: function (result) {
//ERROR: Callback is not recognized as a function
callback();
}
});
} else {
return;
}
}
此函数的唯一实例是
changeSetting(displayEmail());
未捕获的类型错误:回调不是函数
答案 0 :(得分:1)
仅传递displayEmail而不是在changeSetting函数的参数中调用
changeSetting(displayEmail);
答案 1 :(得分:1)
问题出在您的函数调用上。
<script>
function changeSetting(callback) {
....
}
function displayEmail() {
return "email displayed"; // dummy value in this case
}
</script>
想象一下例如运行此代码。
changeSetting(displayEmail()); // first the display email function is evaluated
请注意,我们正在使用括号displayEmail()
来调用()
函数。这意味着我们将运行它并返回其return
值,无论它是未定义的,还是在我们的情况下为"email displayed"
。
在评估您作为回调传递的函数之后,它会简化为不是函数的内容,从而导致错误。伪明智的做法是“简化”。
changeSetting("email displayed"); // "email displayed" is obviously not a function
要解决此问题,只需先不调用该函数,然后将指针传递给该函数即可,该指针就是displayEmail
。
changeSetting(displayEmail);