仔細看了下,稍微簡化了下最終代碼
寫出一個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;
}
}
}
這是修改後的最終結果,同時支持 多個數據計算,單個數據計算,數組計算,
此文只是個人學習使用,不足之處,請留言評論,謝謝!!!