深入认识函数
把函数看一个模具,我们要生产内容的时候,在里面生成内容。
//正常的写法:
function fn(){
var a = 1;
var b = 2;
var c = 3;
console.log( a + b + c );
}
fn();
我们在对变量进行相加的时候,正常要先声明多个值,然后对变量进行赋值.最后对函数进行运算;
但是如果我们想多次就需要我们封装函数,只要传入对应的参数就可以运算了:
两个括号里面function fn( a(形参) , b(形参) , c(形参) )
fn(1(实参) , 2(实参) , 3(实参))
//形参
function fn( a , b , c ){
//形参:根据我们不同的指令,输出不同的内容。
console.log( a );//1
console.log( b );//2
console.log( c ); //3
return a + b + c ;
// 1 + 2 + 3 = 6
}
fn( 1 , 2 , 3 );
//实参:实际存在的参数;//每次都传入不同的值;
// fn( 4 , 5 , 6 ); fn( 7 , 1 , 9 );
//特点:可以比较随意,只要符合变量的命名规则即可;
实参与形参:
实参:函数自执行时,括号里面的内容;
形参:函数定义/声明,原括号里面的内容。
argument不定参:
- 会根据每个参数执行意义不同; 一一地对应上参数。
- argument:ES6就被废除了
//如果值多值少的情况?
function fn( a , b , c ){//参数:根据我们不同的指令,输出不同的内容
console.log( a );
console.log( b );
console.log( c );
}
fn( 1 , 2 , 3 ); // 1 2 3
fn( 2 , 4 , 6 , 8 );//2 4 6
fn( 3 , 1 ); // 3 1 undefined
//如果没有形参来接收的话,输出的值为undefined; 形参个数比实参少那么最后的实参是没有作用的
function fn(){
console.log( arguments );
/* 不定参(argument),是一个结构看起来非常类似数组的对象;
类数组对象都有一些跟数组相似的特性;
1.取值用[下标]:下标从0开始;
2.都拥有length属性; */
}
fn( 2 , 4 , 6 , 8 );
function fn(){
console.log( arguments[0], arguments[1]); // 1 3
//取值 console.log( arguments.length );
}
fn(1,3,5,7,9)
function fn(){
//参数:根据我们不同的指令,输出不同的内容。
//console.log( arguments.length );
var num = 0;
for( var i = 0;i< arguments.length ;i++ ){
num +=arguments[i];
}
console.log( num );
}
fn( 1 , 2 , 3 ); // 6 1 + 2 + 3
fn( 2 , 4 , 6 , 8 ); //20 2 + 4 + 6 + 8
fn( 3 , 1 ); // 4 3 + 1
//argument( 不定参 ): 参数是不确定的。 //意义:每个根据实参转入的个数不同,一一地对应上;
return 返回值
接收值为undefined,用来设定函数的返回值;
function fn( ){//参数:根据我们不同的指令,输出不同的内容。
//console.log( arguments.length );
var num = 0;
for( var i = 0;i< arguments.length ;i++ ){
num +=arguments[i];
}
console.log( num );
//return num; //把值给return出来。 如果没有return值 会默认返回一个underfined 但是不影响函数
}
var a = fn( 2 , 4 , 6 , 8 );
console.log( a );
/*
注意:
1.一个函数只能有一个return的返回值;
2.return里面的内容可以随意;
3.return 的内容不能换行,因为JS有一种自动添加换行的基制,换行之后会在后面会自动添加分号;
return 2,num,123,'sunday';
var a = fn();
console.log( a );
4.逗号运算符只会返回最后一条数据;所以不管逗号前面写了多少个值,都会执行。
5.只不过只有最后一个能被返回出来,前面的内容通通不会被返回出来。
*/
函数表达式种类
一共有7种函数表达式的写法;
//1.
var a = function(){ console.log(1) };
//2.
(function(){ console.log('2');})()
//3.
(function(){console.log( '3' );}())
//4.
+function(){console.log('4');}()
//5.
-function(){console.log('5');}()
//6.
~function(){ console.log('6');}()
//7.
!function(){console.log( '7' )}()
函数表达式的区别
//就拿第一个与其它的区别:
var a = function(){ console.log(1) };
/*
1.与其它类型的区别:可以不立即执行;其它的函数必须立即调用,不然是没有意义。
2.意义:如果函数里面需要立即执行的时候就可以使用这种样式;
3.一打开就自行加载,一般用这种 (fn)();
4.都会生成一个立即执行的匿名函数,作用:产生一个作用域;
*/