<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script >
//参数无需声明 调用时少了参数自动默认undefined
function myFunction(x,y){
if(x==undefined){
x=0;
}
}
//参数太多 使用arguments来调用参数数组
var x=fun1(20,30,50,60);
function fun1(){
for(i=0;i<arguments.length;i++){
console.log(arguments[i]);
}
return 1;
}
//函数构造器
function fun2(arg1,arg2){
this.name=arg1;
this.age=arg2;
}
//创建新对象
var p=new fun2("str",18);
console.log(p);
//call方法 参数为对象
var person={
name:function(){
return this.name;
},
//带参数引用
nameAge:function(age){
return this.name+" "+age;
}
};
var p1={
name:"str"
};
var p2={
name:"lll"
};
console.log(person.name.call(p2));
console.log(person.nameAge.call(p1,18));
//apply() 方法 和call方法类似 但参数可以为数组
var animal={
name:function(age,city){
return this.name+" "+age+" "+city;
}
};
var dog={
name:"dog"
};
console.log(animal.name.apply(dog,[5,"NewYork"]));
//在数组应用
//数组无max方法
Math.max.apply(null,[1,2,13]);
//闭包 自调用函数
var add=(function(){
var counter=0;
return function(){return counter=counter+1;}
})();
add();
add();
console.log(add());
//单独使用this 对象为全局对象[object Window]
var t=this;
//事件处理中的this 指的是接收此事件的 HTML 元素
//箭头函数
hello=()=>{
return "str";
}
//只有返回值 可以去掉return
hello1=()=>"str1";
//带参数
hello2=(arg)=>"str2"+arg;
</script>
</body>
</html>