代码如下:

 

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//JavaScript高级程序设计;
//js介绍的时候,学习更多关JS标签上的属性;
// 函数定义和执行的过程
//1.定义一个函数。
//首先开闭一个新的内容地址xxxfff000,然后把函数体重的就是代码当做字符串存起来;(所以说函数只定义了,没有执行的话没有任何的意义;定义的话,知识存了字符串。)
//把地址给函数名名;
//2、执行一个函数;
//首先形成一个供代码执行的环境;在这个环境中(作用域),在作用域中定义的所有的变量都是私有的;外面不能直接的获取;外面把这种机制叫做闭包;
//把之前存储的代码字符串当做代码依次执行;

// 任意数求和:实现一个功能;不管传多少数,都能求和;
//内置接受参数机制;arguments;是一个对象数据类型,也叫做类数组(类似数组:以数组作为索性,索引是从0开始,所以0代表1,索引1代表第2个,所以N代表第N+1个,有一个代表长度的书写length)
//arguments.length,传递几个参数;可以写成arguments["length"]
//0.1.2.3...这个写属性名也代表当前第几个,我们把他们成为索引;
//arguments[0]
//每一次把对应传过来的值进行累加;对于重复反复执行多次的同一个任务,我们用循环来做;如果知道具体循环的次数就用for循环;
//Numeber强制转化后只有两种结果,NaN和数字;


/* function sum(){
var total= 0, len=arguments.length;
for (var i=0;i<len;i++){
var val=(arguments[i]);
if(typeof val!="number"){
val=Number(arguments[i]);
//NaN永远不等于NaN;
if(!isNaN(val)){
total=total+val;
}
}
}
}
*/
//函数外面想用里面 的东西,不能直接用,因为闭包;需要用用return;
function sum(){
var total= 0,len=arguments.length;
for (var i=0;i<len;i++){
var val=arguments[i];
typeof val !="number"? val=Number(val):void 0;//void 0用 于占位,如果不写,三目运算会报错
//void意思是空的,?前面是条件 ?后面是if语句 :后面是else语句
!isNaN(val)?total+=val:void 0;
}
return total;
}

var total= sum(12,23,34,45,"a","12");
console.log(total);

/* function sum(){
var a=1+1;
}
sum();
console.log(a);//a是闭包里面的,调取a是报错的;
*/

</script>
</head>
<body>

</body>
</html>