尝试学习javascript和回调。我在这里错过了什么? 的 EDITED
var fibNumber = function(n, callback)
{
if (n < 2){
return 1;
}else{
return function(n-2) + function(n-1);
}
callback(n)
}
var n = console.log(prompt("An integer please: ");
fibNumber(n, function(n)
{
console.log(n)
});
答案 0 :(得分:1)
无法通过传递x和y的值来了解您要完成的任务。
如果您只想为前N个数字打印斐波纳契系列,我已编写此代码。
var fibNumbers = function(n, callback){
var series = [];
var temp;
for (var i = 0; i <= n; i++){
if(i == 0 || i == 1){
temp = 1;
}else{
temp = series[i-1] + series[i-2];
}
series.push(temp);
}
callback(series); //calling the callback here with argument series array containing the series
}
fibNumbers(30, function(result){
console.log(result); //will console log the series
});
答案 1 :(得分:1)
如果您希望在最终计算后调用回调并将fibo系列提升到该数字,那么这将是您的方法之一:
function fibo(n, callWithSeries) {
fibo.series = fibo.series || [1];
fibo.f(n);
callWithSeries(fibo.series.slice(0, n + 1));
return fibo.series[n];
}
fibo.f = function(n) {
if (fibo.series[n])
return fibo.series[n];
if (n < 2)
return (fibo.series[n] = 1);
return (fibo.series[n] = fibo.f(n - 1) + fibo.f(n - 2));
};
var res = fibo(6, s => console.log(s));
console.log('result: ', res);
res = fibo(2, s => console.log(s));
console.log('result: ', res);
&#13;
答案 2 :(得分:0)
发生了什么变化:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.example.akhil.myapplication"
minSdkVersion 22
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
}
- 没必要。fibNumber
用作fibNumber
callback
。用于计算斐波纳契数的原点函数。f
内进行检查并调用f
。然后使用callback
和f
进行function
(n - 2
不是函数名称)的rigcht调用。结果重新调整。n - 1
而不是console.log
的结果。这不起作用。将两部分拆分为两部分,并将数值指定为prompt
。然后输出。n
并输出结果。
fibNumber
答案 3 :(得分:0)
一些问题:
return
的电话之前总是执行callback
语句,因此永远不会执行。所以,不要返回,而是将结果存储在变量中,然后调用callback
然后返回该值。function
语法不正确,您想要拨打fibNumber
。fibNumber
时,您不会提供callback
参数。这没关系,但是你应该在调用callback
之前测试你是否收到了这个参数。否则,您将在调用undefined
。console.log(prompt(...))
不会返回输入值,至少在所有浏览器中都不会。单独执行console.log(n)
。prompt
收到的输入始终是字符串。如果没有这种转换,函数中的n < 2
比较将永远不会成立,因此您将进入无限递归。使用+
统一运算符将输入转换为数字。n
作为输入和输出。最好为其使用不同的变量名称。以下是您的代码更正:
var fibNumber = function(n, callback)
{
var result; // for temporary storage of value to be returned
if (n < 2){
result = 1;
}else{
// You cannot call "function", you need to call "fibNumber"
result = fibNumber(n-2) + fibNumber(n-1);
}
// Only call callback when it was provided
if (callback) callback(result);
// also return it:
return result;
}
var n = +prompt("An integer please: "); // cast input to number
console.log('input: ', n); // don't use console.log to get `n`.
fibNumber(n, function(result) // use different name
{
console.log('result: ', result)
});
&#13;