调用子函数
Calling sub functions
这是一个查找第n个fibonacci数的程序。
var fib = (function() {
var save = [];
var i = 0;
return {
"getNum": function(input) {
this.input = input;
if (input === 0) {
console.log("Invalid input");
}
save[i] = i;
save[i + 1] = i + 1;
save[i + 2] = i + 1;
i = 2;
for (i >= 2; i < input; i = i + 1) {
save[i + 1] = save[i] + save[i - 1];
}
console.log(save[i - 1]);
}
}
}());
fib.getNum(4);
我的问题是,当我以以下方式实现这个问题时,它不起作用。我理解这是因为我没有调用子函数,只调用主函数。我们是否可以使用一种更好的模式来保持代码的有序性,并且不必调用那么多函数?
var fib = (function() {
var save = [];
var i = 0;
return {
"getNum": function(input) {
this.input = input;
function valid() {
if (input === 0) {
console.log("Invalid input");
}
}
function config() {
save[i] = i;
save[i + 1] = i + 1;
save[i + 2] = i + 1;
i = 2;
}
function nthNum() {
for (i >= 2; i < input; i = i + 1) {
save[i + 1] = save[i] + save[i - 1];
}
console.log(save[i - 1]);
}
}
}
}());
fib.getNum(4);
您可以考虑使用closure
来创建私有和公共函数。如果您看到下面的代码,则只显示_getNum
函数。
var fib = (function() {
var save = [];
save[0] = 0;
save[1] = 1;
var i = 0;
//This will validate the number
// This function can be avoided and make _getNum do the same
function _valid(input){
console.log("Method Executing:_valid");
input === 0 ? console.log('Invalid Input') : _nthNum(input);
}
// Will calualte the series.
// This is a private function
function _nthNum(input) {
console.log('Method Executing:_nthNum');
for (i = 2; i<=input; i++) {
save[i] = save[i-2] + save[i - 1];
}
console.log(save.pop());
}
// Private Function
function _getNum(input){
console.log("Method Executing :_getNum" ,input);
_valid(input);
}
//Expose the private function
return {
getNum :_getNum // Expose _getNum
}
}());
fib.getNum(0);
fib.getNum(4);
fib.getNum(7);
工作副本
我的建议:
var Fibonacci = (function() {
var _Fibonacci = {
// set initial values
result: [0, 1, 1],
input: 0,
// main function
find: function (number) {
this.input = number;
if (this.isValid()) {
this.calculate();
return this.result.pop();
}
return 'Invalid input';
},
// sub functions
isValid: function () {
return this.input != 0
},
calculate: function () {
for (var i=2; i<this.input; i++) { // fix your code here
this.result[i+1] = this.result[i] + this.result[i-1];
}
}
};
// return the main function
return _Fibonacci.find.bind(_Fibonacci);
}());
console.log(
Fibonacci(0),
Fibonacci(4),
Fibonacci(6)
);
相关文章:
- Django运行从父级导入的javascript函数,由子级调用
- 调用子函数时阻止父jquery函数
- JavaScript 从子对象调用父函数
- 从子指令调用指令函数不起作用
- 从调用/子函数退出/中断主函数
- 从 Angular 中声明的子窗口调用主窗口中的函数
- 如何在 javascript 中从子原型调用父类的构造函数方法
- nodejs - 从子模块调用父模块内的函数
- 带有附加子函数的函数调用
- 调用子函数
- 在带有变量括号的对象中调用子函数
- 从子类函数调用超级函数
- Javascript类扩展:从子类函数调用基类函数:似乎在调用静态方法
- 从子级调用父级的JavaScript函数原型
- 当子组件有嵌套的多个父组件时,从子组件调用超父函数
- 如何从子窗口调用父窗口函数
- React Native函数作用域(从子函数调用父函数)
- 不能使用React从子组件调用父组件中的函数
- 用BackboneJS从子视图调用视图函数
- Javascript在window.opener.location.reload后从子函数调用父函数