Javascript 将变量设置为回调函数的返回值
Javascript 将变量设置为回调函数的返回值,javascript,callback,Javascript,Callback,getElementId函数: function getIdElements(idname, callback) { callback(document.getElementById(idname)) }; 我想这样使用它,但是plLen得到未定义的: var plLen = getIdElements("length", function(e){return e.textContent}); 如果有人能尽可能深入地解释,我会很高兴的。谢谢。您只需返回回调返回的值: function
getElementId函数
:
function getIdElements(idname, callback) {
callback(document.getElementById(idname))
};
我想这样使用它,但是plLen
得到未定义的:
var plLen = getIdElements("length", function(e){return e.textContent});
如果有人能尽可能深入地解释,我会很高兴的。谢谢。您只需返回回调返回的值:
function getIdElements(idname, callback) {
return callback(document.getElementById(idname));
}
这与从回调中获取返回值并返回它几乎相同。下面是一个详细的版本:
function getIdElements(idname, callback) {
var element = document.getElementById(idname);
var callbackRetrunValue = callback(element);
return callbackRetrunValue;
}
在您的代码中:没有返回值,您从GetIdeElements
读取的值只是未定义的值:您可以简单地返回回调返回的值:
function getIdElements(idname, callback) {
return callback(document.getElementById(idname));
}
这与从回调中获取返回值并返回它几乎相同。下面是一个详细的版本:
function getIdElements(idname, callback) {
var element = document.getElementById(idname);
var callbackRetrunValue = callback(element);
return callbackRetrunValue;
}
在您的代码中:没有return
值,您从getIdeElements
读取的值只是未定义的
:很好,但我想知道为什么我的版本没有像我预期的那样工作。@Johnny:因为您没有返回回调
返回的值。您只需忽略回调
的返回值。为True,但我从GetIdeElements
中的另一个函数返回的值不应该与我在其中返回的值同时关闭?@Johnny:不,当然不是。这意味着您只能在另一个函数中调用一个函数。假设有两个函数foo
和bar
。您知道它们在做什么,但不知道它们是否返回值。现在您有了一个函数函数baz(){foo();bar();}
。根据您的逻辑,如果foo
返回一个值,baz
也将返回该值,bar
甚至不会执行。那太不直观了。这意味着您必须始终知道函数是如何实现的,这在一开始就完全无法创建用于抽象的函数。@Johnny-No:return适用于当前函数。唯一像你描述的那样有效的是。有一些语言“自动”返回最后一个值,但JavaScript不是其中之一(例如,或Scheme)。很好,但我想知道为什么我的版本没有按我的预期工作。@Johnny:因为你没有返回回调
返回的值。您只需忽略回调
的返回值。为True,但我从GetIdeElements
中的另一个函数返回的值不应该与我在其中返回的值同时关闭?@Johnny:不,当然不是。这意味着您只能在另一个函数中调用一个函数。假设有两个函数foo
和bar
。您知道它们在做什么,但不知道它们是否返回值。现在您有了一个函数函数baz(){foo();bar();}
。根据您的逻辑,如果foo
返回一个值,baz
也将返回该值,bar
甚至不会执行。那太不直观了。这意味着您必须始终知道函数是如何实现的,这在一开始就完全无法创建用于抽象的函数。@Johnny-No:return适用于当前函数。唯一像你描述的那样有效的是。有些语言“自动”返回最后一个值,但JavaScript不是其中之一(例如,或Scheme)。