1.形参和实参
在大多数语言中例如java,c等都要求使用函数时要满足实参和形参类型数量相等,但是在js中对于实参形参的要求非常不严格,
<script>
//1.如果实参个数多于形参会收到形参的个数
function sum(unm1,num2)
{
console.log(num1,num2);
}
sum(1,2,3);//结果为3,不会报错
//2.实参个数小于形参个数
function sum(unm1,num2)
{
console.log(num1,num2);
}
sum(1);//结果为NaN,如果实参个数少则没接收到的形参为undefined,数字加undefined为NaN
</script>
还是建议大家按照规范来写代码,尽量将实参和形参个数相匹配,因为基本常用大概只有JavaScript语言可以让你参数数个数不匹配,所以说养成好习惯在你以后学习其他语言时更有帮助。
2.arguments使用
arguments对象中储存了传递的所有实参。
arguments也算是一个伪数组,具有length属性,按照索引的方式进行储存,但是它没有真正数组的一些特性。
<script>
function fn()
{
for(var i =0;i < arguements.length;i++)
{
console.log(arguements[i]);
}
}
fu(1,2,3,4,5);//输出1,2,3,4,5;
//用这个就是为了可以传进去不同个数的形参
function Max()
{
var max = arguements[0];
for(var i = 1;i < arguements.length;i++)
{
if(max < arguements[i])
{
max = arguements[i];
}
}
return max;
}
console.log(Max(1,44,23,66,22,3,25))//输出为66
</script>
3.特殊的函数声明
//fun是变量名,不是函数名,所以这种方法声明的也成为匿名函数,但是和正常函数的作用一样。
var fun = function() {
console.log('函数表达式');
}
fun();
4.预解析
js引擎会先将你的代码进行预解析,然后进行代码执行。
预解析会将js中所有的var 还有function 提升到当前作用域最前面
<script>
var mum = 10;
fun();
function fun()
{
console.log(num);//输出20;由于js会进行预解析
var num = 20;
}
</script>
5.构造函数创建对象
语法格式:function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
<script>
function Star(uname,age,sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.tebie = function(tebie){
console.log(tebie)
}
}
var heibai = new Star('黑白',18,'男');//调用函数返回的是一个对象
console.log(heibai.name)//输出黑白
var baihei = new Star('白黑',18,'女');
console.log(baihei.sex)//输出女
heibai.tebie('高');
baihei.tebie('矮');
//构造函数名首字母要大写
</script>