for循环补充
遍历对象中的属性名和属性值
obj.key为什么在for in循环里出现undefined的原因
obj.key等于的是obj[“key”],而不是obj[key],在当前key是属性名的索引,是一个变量
var obj={"name":"li","age":12}
for(var key in obj){
console.log(key); //name age
console.log(obj[key]);// li 12
//console.log(obj.key); undefined undefined
}
while
是只要条件成立就执行里面的内容
// while是只要条件成立就执行里面的内容
while(num>3){
num++;
console.log(num);
}
do{函数体}while(判断条件)
先执行do里面的语句,再判断while是否成立,成立执行do
do{
num++;
console.log(num);
}while(num>3)
函数
代表某种功能
函数是一个引用数据类型,在存储的时候,开辟一个堆内存,把函数里面的代码当成字符进行存储(空间地址),然后把地址给函数名
- 形参:形式上的参数
- 实参:真实传递的参数
- 不确定穿的的参数个数:arguments是一个(类数组),有索引,有长度
- arguments.length真实传递的参数个数
- arguments[0]具体的某个参数
- arguments.callee当前函数本身
- 函数执行的时候会形成一个私有作用域,保护函数变量不被污染,这种机制可以称之为
闭包
- 外面拿不到函数内的参数,如果想传给外面,需要return你想传的值
- 函数分为实名函数。匿名函数。箭头函数
function ac(){
console.log(arguments);
//arguments是形参集合,当不知道形参个数的时候可以用这个,结果是一个类数组
//拿到具体的参数arguments[索引]
//arguments.length可以拿到形参的个数
//arguments.callee函数本身
}
ac(1,2,3,4);
函数的返回值return
function ad(x,y){
x+y;
return 100;
}
var res=ad(10,11); //res是100
//不写return,res就是undefined
匿名函数
- 函数表达式
自执行函数
自执行函数的特点是末尾都有(),开头可以为+-~!,也可以用()包起来,效果一样
// 函数表达式
var a=function(){
console.log(1);
}
//自执行函数5种
(function(){console.log(1)})();
+function(){}();
-function(){}();
~function(){}();
!function(){}();
箭头函数
箭头函数里面没有arguments,写的话会报错,但是有一个替代品…arg是剩余运算符,输出为
var res=(x,y)=>{
console.log('箭头函数');
}
res();
var res=x=>{return x+1};
//如果只有一个形参,()可以省去
var res=x=>x+1;
//如果函数体只有一个return,return也可以省去
函数接受参数的方式:
- arguments
- 形参
求和
//数字求和
function cn(){
var he=0;
for(var i=0;i<arguments.length;i++){
// console.log(arguments[i]);
he+=arguments[i];
}
return he;
}
// var ad=cn(1,2,3);
// console.log(ad);
console.log(cn(1,2,3));
//有效数字的和
function total(){
var hh=0;
for(var i=0;i<arguments.length;i++){
if(!isNaN(arguments[i])){
hh+=Number(arguments[i]);
//加Number()是防止值为字符串
}
}
return hh;
}
console.log(total(1,"22px",11,""23));