函数是什么
- 函数就是把一些高偶合的代码给放进一个黑匣子里面,需要用到的时候就调用
函数声明
function test () {
document.write("这个是函数声明");
}
tese();
命名函数表达式
var test = function abc(){
document.write("这个是命名函数表达式");
}
test();
匿名函数表达式
var test = function(){
document.write("这是匿名函数表达式");
}
test();
命名函数和匿名函数的区别
- 匿名函数和命名函数,除了命名函数的name = 等于命名的名字之外,和匿名函数没有任何区别。
命名函数 test.name = 命名函数的名字
匿名函数 test .name = test
函数参数(形参,实参)
//a,b就是形参,没有任何具体的意义,可以理解为占位。
var test = function( a,b ){
document.write(a + b);
}
test(10,20);
//test(这里面输入的就是实参,里面的两位数就是对应a和b)
javascript 函数的特殊情况
形参多实参少
他会直接忽略形参多余的部分,你下面实参没传参数吗,那形参就等于摆设,
在javascript中定义形参就相当于在function中var了一个变量,但是这个变量
没有传数据。实参多形参少
他会直接忽略多余的实参的数据,只显示实参对应的形参的数据。
但是,他忽略了实参,没有显示在形参上面,不代表他就没有了,
其实他是会自动存进一个叫 arguments 的类似数组却不是数组的
实参列表里面。小案例1
var test = function(a,b,c,d){
//如果形参多于实参,那么输出形参多了,否则相反
if(test.length > arguments.length){
console.log("形参多了");
}else if(test.length < arguments.length){
console.log("实参多了");
}else{
console.log("相等");
}
};
test(1,2,3,4,5,7,8,9);
小案例2
var sum = function(){
//求多个未知数的和,数的多少不清楚
var resuit = 0;
for(var i = 0;i <arguments.length;i++){
resuit += arguments[i];
}
console.log(resuit);
};
sum(10,20,30,40,50,60);
函数的映射关系
var test = function(a,b,c,d,e){
a = 3;
console.log(a); // 3
arguments[0] = 5;
console.log(a); // 5
};
test(1,2,3,4,5);
虽然上面实验是会改变,但是,他改变的并不是同一个数了,是映射关系,可以比喻成两兄弟,
你做什么,我就做什么,保持高度一致,但是却是不同的一个东西。
特殊情况
var test = function(a,b){
//当形参有两位数,实参只有一位数的时候,改变arguments[1],还会进行映射吗
b = 2;
console.log(b); //2
console.log(arguments[1]); //undefined
//arguments[1],现在的arguments里面只有1,没有其他数值
};
test(1);
这是一种特殊情况,如果实参少于形参,多余的形参只会当做一个变量,而不会进行映射。
arguments是代表实参数列,意思就是说,你实参压根就没有这个值,所以没办法去做。
只有在形参和实参的数量都相等的情况下,才会进行映射,否则不进行。
返回值 (return)
//让在sum的参数转换为number类型
function myNum(sum){
return Number(sum);
}
var num = myNum("123");
console.log(typeof(num)+ " : " + num );
一般写程序的时候,不会让函数再里面打印,正常情况都是用于计算,然后返回给函数本身。
return可以是结束语句,也可以说是返回语句。
function test(){
console.log("a");
return;
console.log("b");
}
test();
如果这样子写的话,那么rutern就作为结束语句来使用,只会输出“a”,而不会输出“b”;
小案例
// 把一组数翻转并且输出;
function reverse () {
var num = window.prompt("请输入一组数字");
var str = "";
for (var i = num.length; i >= 0; i--) {
str += num.charAt(i);
}
return str;
// document.write(str);
}
var resuit = reverse();
document.write(resuit);
小案例
var fun =function (sum1) {
var resuit = 1;
for(var i = 1;i <= sum;i++){
resuit *= i;
}
console.log(resuit);
};
var sum;
fun(sum = +prompt("请输入n的阶乘"));
小案例
var fun = function (sum) {
var a, b, resuit;
a = 1;
b = 1;
if (sum > 2) {
for (var i = 0; i < sum - 2; i++) {
resuit = a + b;
a = b;
b = resuit;
console.log(resuit);
}
return resuit;
} else {
return a;
}
};
var num;
num = fun(+prompt("请输入位数计算斐波那契数列"));
document.write("通过运算得出的结果为 : " + num + "<br>" + "具体结果请按 F12 键进行查看");