[js点滴]JavaScript关于函数总结

	/*1.函数的概念	
	函数就是实现某一功能的代码片段.
	  2.函数的分类
	  a.预定义函数(系统函数)
	  b.自定义函数
	  函数又称之为方法
	  3.函数定义
	  function 函数名(参数1,参数2,参数3,...){
	  	函数主体
	  }
	 注意两点:
	 a.function为关键字,用来定义函数;
	 b.函数名必须是唯一的.	
	 
	 4.函数的写法:
	*/
//	 4.1 function 关键字写法
     function test(){
     	console.log("12343");
     }
//  4.2 函数表达式写法(匿名函数),采用变量赋值的写法 
    var fun = function(){
    	  console.log("xasc");
    };
   /* 注意:
    1.赋值语句的等号右侧只能放表达式,这种写法是将匿名函数赋值给变量.
    2.采用函数表达式写法,function后面不能带有函数名,如果加上函数名,该函数名只在函数主体内部有效
    3.函数表达式语句后面要加上分号.
   
     var fun1 = function func(){
     	alert(typeof func);
    	  console.log("xasc");
    };  
     fun1();
     alert(typeof func);
    */   
//4.3 Function构造函数创建函数对象    
 var test = new Function(
 	'x',
 	'y',
 	'return (x+y)'
 )
//等价于	
function test1(x,y){
	return x+y;
}
/*解释:
1.Function构造函数里面三个参数,第1,2个参数表示参数,第3个参数表示函数的实现主体
2.该种写法非常不直观,几乎无人使用这种写法
*/


//5.函数的重复定义
function t1(){
	console.log("t1");
}
t1();//t2
function t1(){
	console.log("t2");
}
t1();//t2
/*注意:
如果两个函数的函数名一样,后一次的函数定义会覆盖前一个函数定义,由于存在函数名的提升,前一次定义在任何时候都是无效的.
*/
//6.函数调用
function t2(){
	
}
t2();//表示函数的调用

function t3(a,b){
	return a+b;
}
t3(1,2);//有参函数的调用

//7.函数名的提升
/*在js当中,把函数名等视为变量名,所以一般采用function来定义(第一种方式定义的函数)的函数,整个函数会像变量定义一样,被提升到代码的头部.
 * 
 */
funct();
function funct(){
	console.log("adas");
}
/*解释:
funct()在函数的定义之前进行了调用,由于该种方法定义的函数存在函数名的提升,函数funct会自动提升到代码的头部,也就是在调用之前已经声明了.

fu();//函数的调用 fu is not a function
var fu = function() {
	console.log("fu");
}
*/
//8.如果采用function和函数表达式形式来定义同一个函数,最后总是采用函数表达式形式定义的函数
var fus = function(){
	console.log("aaaa");
}
function fus(){
	console.log("bbbb");
}
fus();//aaaa


//9.ECMA规定,不得在非函数的代码块中定义函数,如:在if或者try语句中

/*if(false){
	function fus2(){
		console.log("123");
	}
}
fus2();
*/

//10.函数的属性
var s = function(){
	console.log("xs");
}
function ss(){
	
}
//10.1 name属性 返回函数function后面的函数名.

console.log(s.name);//""
console.log(ss.name);//"ss"

//10.2 length 属性 返回的是定义函数时参数的个数.
function sss(a,b,c){
	
}
sss(1,2);
sss.length;//3

//10.3 函数toString() 以字符串形式返回函数的源码
//function ssss(){
//	//返回值
//	return "ABC";
//}
//ssss.toString();
//"function ssss(){\
//	//返回值\
//	return "ABC";\
//}\
//"
//注意:函数中的注释也会输出出来

//11.函数内部的变量提升
function add(x){
	
if(x>0){
	var temp = x+100; 
}	
}
/*相当于
function add(x){
var temp;	
if(x>0){
   temp = x+100; 
}	
}
注意:与全局变量一样,函数内部的变量,也会发生一个变量名的提升现象,var 声明的变量,无论在函数内什么位置,变量名都会提升到函数体的头部.
*/
//12.函数的作用域
var sub = function(){
	function sub1(){
		console.log("sub1");
	}
}
//sub1();//访问不到,sub1是局部变量,可见范围只在它所在的父级区域


//13.函数的参数
function s10(a,b){
  return a+b;	
}
var result = s10(2,12);
/*
注意:
1.a,b是s10函数的两个参数,且参数前面不能加var.
2.在js当中函数的参数不是必须的,在调用时允许省略
3.在js中调用函数时,无论提供多少个参数,都不会报错的
4.在js中如果调用函数时,想少传一个参数,则需要把不传的那个参数设置成undefined,例如:s11(undefined,23)
*/
s10(12,13);//25
alert(s10(12,23,12,14));//35
s10();//undefined
s10.length;//2
function s11(a,b){
  return b;	
}
alert(s11(undefined,23));//正常 23

//14.为函数参数设置默认值
function s14(a){
	a = a || 1;
	return a;
}
alert(s14(10));

//15.同名参数
//1.同名参数,取最后参数出现的那个值
//2.如果参数都是b,则以后面的参数b为准,即使后面b没有值或值被省略,依旧以最后一个参数为准
function s15(b,b,b){
	console.log(b);
}

s15(12);//这里省略了后面的两个参数,所以b的取值为undefined.

/*
16.arguments对象
1.由于js中允许函数有不定数目的参数,为了让这些参数不丢失,所以这些参数全部保存在arguments对象里面
2.arguments包含了程序运行时的所有参数,arguments[0]第一个参数,arguments[1]第二个参数,以此类推.
*/
//闭包函数

		function fun1(){
			var n = 1000;
			function fun2(){
				console.log(n);
			}
			return fun2;
		}
	var res1 = fun1();
	    res1();
/*解释:函数fun1返回值是fun2函数,	fun2函数中可以读取到fun1中的变量n,所有在外部就可以获得fun1函数中的变量n了.
闭包就是函数fun2,也就是能够读取其他函数中的变量的函数.
闭包的定义:就是定义在函数内部的函数,它的本质就是将函数内部与函数外部连接在一起的一个桥梁.

*/
function fun3(a){
	
	function fun4(b){
		return a++;
	}
	
	return fun4;
}
var f = fun3(12);
var s1 = f(0);//12
var s2 = f(0);//13
var s3 = f(0);//14
//闭包函数的两个作用:
//1.可以读取函数内部的变量
//2.让这些变量始终保存在内存中,一直存在.
/*缺点:
内存消耗很大,会造成网页性能问题
*/
//	立即执行函数	
//1.常规方法
//   function(){
//  	    console.log("123");
//  }
	
//	f();//函数调用
//	2.立即调用函数表达式
	//(function(){})();
//	或者
   // (function(){}());
//	注意:最后一个圆括号,是向内部传递参数用的
  (function(){
    	    console.log("123");
    })();

//2.eval()将字符串当做语句执行
  eval('var a = 13');//相当于var a = 13;
  alert(a);//13
	
	var b = 14;
	eval('b = 15');//a = 15
	alert(b);//15
	
	
//	var tr = function(a,b){
//		return a+b;
//	}
//	tr(12,13);
	
	(function(a,b){
		return a+b;
	}(12,13));
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图解AI

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值