试着把这个愚蠢一点:
//first named function
function tryMe(x){
tryMeAgain(x);
};
//second named function
function tryMeAgain(y){
return y;
};
//assign the result of first function (which will actually be the result of the second function) to a var
var testTry = tryMe('worth a shot');
console.log(testTry); //undefined! But I would like 'testTry' to return 'worth a shot'
所以我有两个问题:
以下编辑: 因此响应都是有意义的,我认为我的问题可能存在于我的代码中的其他地方。我试图简化这个问题可能忽略了另一个难题。我包括一个新版本,并希望你们都能解释一下:
var runtime = (function(){
var $jq = jQuery.noConflict(true);
function Runtime(){
this.$jq = $jq;
}
Runtime.prototype.method1 = function( _value, _callback ){
setTimeout(function(){ console.log('dependency1_resolved');
_callback.apply(this, [{valIs:_value}]);
}.bind(this), (Math.random() * 1000));
};
Runtime.prototype.method2 = function( _value, _callback ){
var self = this;
setTimeout(function(){ console.log('dependency2_resolved');
_callback.apply(self, [{differntValIs:3}]);
}.bind(this), (Math.random() * 1000));
};
Runtime.prototype.method3 = function( _value, _callback ){
setTimeout(function(){ console.log('dependency3_resolved');
_callback.apply(this, [{valIs:_value['differntValIs'] *= 4}]);
}.bind(this), (Math.random() * 1000));
};
return new Runtime();
})();
runtime.initialize(function( $ ){
function firstCalc(firstInput){
return runtime.method1(firstInput,secondCalc);
};
function secondCalc(secondInput){
return runtime.method2(secondInput, thirdCalc);
};
function thirdCalc(thirdInput){
return runtime.method3(thirdInput, fourthCalc);
};
function fourthCalc(ourResult){
//console.log( ourResult );
return ourResult;
};
var _value = firstCalc(4); //this is undefined!!
});
答案 0 :(得分:1)
您要从tryMeAgain
返回值,而不是从tryMe
方法返回值,因此返回的默认值为undefined
//first named function
function tryMe(x) {
return tryMeAgain(x);//need to return the value returned by tryMeAgain to the caller of tryMe
};
//second named function
function tryMeAgain(y) {
return y;
};
//assign the result of first function to a var
var testTry = tryMe('worth a shot');
snippet.log(testTry);

<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
答案 1 :(得分:0)
除非另有说明,否则函数的默认返回值为undefined
。这就是您的代码中发生的事情,testTry
返回undefined
答案 2 :(得分:0)
你的整个代码都是错误的。
function tryMe(x){
tryMeAgain(x);
};
在这里你只是调用函数但没有返回那个正在调用它的值,那么肯定是
var testTry = tryMe('worth a shot');
将未定义
将其更改为
function tryMe(x){
return tryMeAgain(x);
};
修改强>
function firstCalc(firstInput){
return runtime.method1(firstInput,secondCalc);
};
你的firstCalc正在调用secondCalc和secondCalc调用thirdCalc,但你缺少的是 firstCalc , secondCalc 和 thirdCalc 是函数和你的将这些值作为没有任何值的变量传递,将它们称为函数。
function firstCalc(firstInput){
var secondCalc = secondCalc(thiValueYouWantToCalculate);
return runtime.method1(firstInput,secondCalc);
};
答案 3 :(得分:0)
让我们按照函数调用开始:
var _value = firstCalc(4);
firstCalc(4)的结果是什么?好吧,firstCalc()返回runtime.method1()的结果。
runtime.method1(4,secondCalc)的结果是什么?它是未定义的,因为runtime.method1()只是稍后执行setTimeout来调用secondCalc(),然后返回。没有显式的return语句,因此默认行为是返回undefined。
这就是你的初始表达式“var _value = firstCalc(4)”结束的地方。
setTimeouts导致在随机延迟之后调用其他函数,并且实际上在fourthCalc()内部变量ourResult应该是{valIs:12},但是这会在setTimeouts导致各种calc函数之后发生调用。另外,在第四次Calc中的“return ourResult”将我们的结果归还给......谁?没有人;没有任何东西可以将fourthCalc的结果分配给任何东西。
试试这个:
{{1}}