仔细看了下,稍微简化了下最终代码
写出一个text函数,并实现以下效果
text(1,2); 输出 3
text(1)(2); 输出 3
text(1,2)(3); 输出 6
text(1,2)(3,4);输出 10
声明一个text函数,先对arguments参数的数量进行判断,然后再返回出一个函数,返回函数里再对arguments参数的数量进行判断进行返回输出
调用text() 只支持单个参数
function text(){
//false 默认值是0,true 默认数字值是 1,如果不给num赋值的话 无法计算,始终输出 NaN
var num=false;
if(arguments.length<=1){
num+=arguments[0];
return function(){
if(arguments.length<=1){
return num+arguments[0];
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
下面对它进行一些改进,让它支持多个参数。其实就只是在text函数的else里面加了一个返回函数
function text(){
var num=false;
if(arguments.length<=1){
num+=arguments[0];
return function(){
if(arguments.length<=1){
return num+arguments[0];
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return function(){
if(arguments.length==0)return num;
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}
也许这样你会觉得一次传入多个参数,不是很笨重吗,我直接传个数组不就好了。有道理,咱们再对它进行下改进
function text(){
var num=false;
for(var i=0;i<arguments.length;i++){
if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
throw '参数不正确,请检查传入参数是否为number或array';
}
}
if(arguments.length<=1){
if((typeof arguments[0])=='number'){
num+=arguments[0];
return function(){
for(var i=0;i<arguments.length;i++){
if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
throw '参数不正确,请检查传入参数是否为number或array';
}
}
if(arguments.length<=1){
if((typeof arguments[0])=='number'){
return num+arguments[0];
}else{
for(var i=0;i<arguments[0].length;i++){
num+=arguments[0][i];
}
return num;
}
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}else{
for(var i=0;i<arguments[0].length;i++){
num+=arguments[0][i];
}
return function(){
for(var i=0;i<arguments.length;i++){
if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
throw '参数不正确,请检查传入参数是否为number或array';
}
}
if(arguments.length<=1){
if((typeof arguments[0])=='number'){
return num+arguments[0];
}else{
for(var i=0;i<arguments[0].length;i++){
num+=arguments[0][i];
}
return num;
}
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}
}else{
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return function(){
if(arguments.length==0)return num;
for(var i=0;i<arguments.length;i++){
if((typeof arguments[i])!='number' && (typeof arguments[i])!='object'){
throw '参数不正确,请检查传入参数是否为number或array';
}
}
for(var i=0;i<arguments.length;i++){
num+=arguments[i];
}
return num;
}
}
}
这是修改后的最终结果,同时支持 多个数据计算,单个数据计算,数组计算,
此文只是个人学习使用,不足之处,请留言评论,谢谢!!!