一、函数的参数
显式参数:在创建函数时,可以写一个过多个形式参数,作用域只和在哪里创建有关,何在哪里调用无关
形参:相当于在函数中声明了局部变量,也是一个标识符,取名最好见名知意,多个形参之间用逗号隔开,在调用的时候,可以在()中写入实参
实参:实际的数据,给形参赋值,赋值的位置是一一对应关系。如果实参个数小于形参个数,没有实参对应的形参就是undefined; 如果实参个数多余形参个数,那么多余的实参没有作用
参数类型:参数可以是任意类型:数字、字符串、对象等都可以
隐式参数:函数内部有一个内置对象 arguments对象, arguments对象包含了函数调用的时候的参数数组,arguments是一个类数组,但是本质是函数,可以用for-of遍历
function fn(a,b,c) {//a b c 为形参
console.log(a,b,c);
}
// fn(1,2,3);//1 2 3 为实参
var obj={
name:"xiaohong"
}
function f1(x) {
// console.log(x.name);
x(111,222,333);//f1(fn);
}
// f1(obj);
f1(fn);
function f4() {
console.log(arguments);
console.log(arguments[1]);
}
f4(1,2,3)
二、函数的返回值
可以用return设置函数的返回值,return后面跟的什么,函数的返回值就是什么, return后面跟的表达式,也是返回表达式的结果
注意: return之后的语句都不执行,如果函数没有return,相当于return undefined
举例:
// console.log(console.log());//undefined
function sum(a,b) {
var c=a+b;
return c;
console.log("return后面不会执行!");
}
console.log(sum(2,3));
// 如果函数没有return,相当于return undefined
function f1() { }
console.log(f1());//返回undefined
// 比较的是两个函数(堆中存储数据),两个函数的地址不同
function f2() { }
console.log(f1==f2);//比较函数的地址
console.log(f1()==f2());//比较函数的返回值(都是undefined)
function sum2(a,b) {
if (b!=undefined) {
return a+b
}
else{
return function(c){
return c+a;
}
}
}
sum2(1,2);
sum2(1)(3);
console.log( sum2(1,2));
console.log( sum2(1)(3));