当前位置: 代码迷 >> 综合 >> JS高级特性(一)
  详细解决方案

JS高级特性(一)

热度:60   发布时间:2023-09-20 22:55:32.0

一、函数

1、如何定义函数

<!DOCTYPE html>
<html><head><title>01_如何定义函数.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">//1 普通方式function add(a,b){return a + b;}//2 直接量方式var add = function(a,b){return a + b;}//3 构造函数方式(在javascript里,底层提供Function对象)var add = new Function('a','b','return a+b;');//javascript中不存在类的概念,只有对象的概念</script>
</html>

2、Arguments对象

<!DOCTYPE html>
<html><head><title>02_Arguments 对象.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">/** Java中具有函数重载:* 	* 节省了函数的命名空间* 	* 代码更加简单* 	* 重载的性能更好* * javascript也想实现函数的重载?没有* 	* 在javascript中定义多个同名的函数,只有最后一个定义的函数起作用* 	* NaN:表示不是一个数值的内容(不存在的值)* Arguments对象:* 	* Arguments对象是数组对象* 	* 利用Arguments对象的length属性,获取参数的个数* 	* 利用Arguments对象的特性,模拟函数重载的效果?可以*/
//	function add(a,b){
//		return a+b;
//	}
//	function add(a,b,c){
//		return a+b+c;
//	}
//	
//	alert(add(1,2));		//output	3	NaN
//	alert(add(1,2,3));		//output	6//	function fn(){
//		alert(arguments.length);
//	}
//	
//	fn();				//output	0
//	fn("a");			//output	1
//	fn("a","b");		//output	2
//	fn("a","b","c");	//output	3function add(){if(arguments.length==2){return arguments[0] + arguments[1];}else if(arguments.length==3){return arguments[0] + arguments[1] + arguments[2];}}alert(add(1,2));		//output	3alert(add(1,2,3));		//output	6</script>
</html>

3、变量的作用域

<!DOCTYPE html>
<html><head><title>03_变量的作用域.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">/** 变量的作用域:* 	* javascript中存在(变量)* 		* 全局变量:全局域* 		* 局部变量:当前局部域(函数域)* 	* javascript中存在(域)* 		* 全局域* 		* 函数域(局部域)*/
//	var a = "a";
//	
//	function fn(){
//		var b = "b";
//		
//		alert(a);		//output	a
//		alert(b);		//output	b
//	}
//	
//	fn();
//	alert(a);			//output	a
//	alert(b);			//output	undefind/** 定义局部变量时,不使用"var"修饰符:* 	* javascript语法上支持这种写法* 	* 局部变量b被定义出来* 	* javascript会自动将局部变量b定义为全局变量* 在实际开发中,不建议这样编写:* 	* 编码不规范*/
//	var a = "a";
//	
//	function fn(){
//		b = "b";
//		
//		alert(a);		//output	a
//		alert(b);		//output	b
//	}
//	
//	fn();
//	alert(a);			//output	a
//	alert(b);			//output	b/** 在javascript中,定义全局变量与局部变量同名时:* 	* 在函数域中,只能访问到局部变量* * 解读代码(代码的执行情况):* 	* 定义一个全局变量a,并初始化为a(存在并且有值)* 	* 定义一个函数fn()(而不执行的时候)* 		* 局部变量a被定义,并没有初始化(存在但是没值)* 	* 调用函数fn()* 		* 第一次打印变量a,是局部变量a,结果为undefind* 		* 第二次打印变量a,是局部变量a,结果为b* 	* 在全局域中,访问变量a,只能是全局变量a*/var a = "a";function fn(){alert(a);		//output	undefindvar a = "b";alert(a);		//output	b}fn();alert(a);			//output	a</script>
<h3></html></h3>

4、几种特殊的函数

<!DOCTYPE html>
<html><head><title>04_几种特殊的函数.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">/** 1 匿名函数:没有名的函数* 	* (匿名回调函数)可以将匿名函数作为参数传递给其他函数。这样,接收方函数就能利用所传递的函数来完成某些事情。* 	* (自调函数)可以定义某个匿名函数来执行某些一次性任务。*///function(){}/** 这种情况下,函数one和two,称之为叫做回调函数* 	* 定义:将一个函数作为另一个函数的参数,而作为参数的函数就叫做回调函数* 将匿名函数作为参数:匿名回调函数* 	* 定义: 将一个匿名函数作为另一个函数的参数,而作为参数的匿名函数就叫做匿名回调函数*/
//	var one = function(){return 1;}
//	var two = function(){return 2;}//函数fn()的参数a,b是参数函数
//	function fn(a,b){
//		return a() + b();
//	}
//	
//	//alert(fn(one,two));			//output	3
//	//以上写法是否可以改写?
//	alert(fn(function(){return 1;},function(){return 2;}));		//output	3/** 一次性任务:函数只被调用一次* 	* 实现页面初始化工作的函数(不严格)* 	* 定义即调用的函数(不严格)* 	* 自调函数:自己调用自己* 		* 第一个小括号:封装函数* 		* 第二个小括号:调用函数(传参)*/
//	(
//		function(){
//			alert("javascript");
//		}
//	)();//	(
//		function(str){
//			alert(str+" javascript");
//		}
//	)("hello");</script>
</html>
<!DOCTYPE html>
<html><head><title>04_几种特殊函数.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">/** 内部(私有)函数(Java里内部类)* 	* 保证了私有性 —— 外部不能访问不到(提供了安全性)*/
//	function fn(){
//		var a = "a";
//		
//		function n(){
//			var b = "b";
//			
//			alert(a+b);		//output	ab
//		}
//		
//		return n();
//	}
//	
//	fn();		//output	ab/** (了解)返回函数的函数(内部函数的一种特殊用法)* 	* 可以在全局域中,访问到局部变量的值* 	* 定义一个函数时,最终执行两个逻辑代码块*/function fn(){//逻辑代码块var a = "a";return function(){//逻辑代码块return a;}}alert(fn());			//output	function(){return a;}//var fun = fn();//var fun = function(){return a;}//alert(fun());			//output	aalert(fn()());			//output	a/** javascript中的特殊函数,不是必要使用的内容* 	* 第一次完成实现逻辑内容时,很少会用到特殊函数* 	* 在做代码优化的时候,会使用特殊函数* * 代码实现:一次性做到代码最优* 	* 实现逻辑内容* 	* 代码优化*/</script>
</html>

二、闭包

1、作用域链

<!DOCTYPE html>
<html><head><title>01_作用域链.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">var a = "a";function fn(){var b = "b";alert(a);			//output	aalert(b);			//output	bfunction n(){var c = "c";alert(a);		//output	aalert(b);		//output	balert(c);		//output	c}return n();}fn();</script>
</html>

2、闭包

<!DOCTYPE html>
<html><head><title>02_闭包.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">var a = "a";var n;function fn(){var b = "b";alert(a);			//output	aalert(b);			//output	b//变量定义,初始化n = function(){var c = "c";alert(a);		//output	aalert(b);		//output	balert(c);		//output	c}return n();}//fn();n();</script>
</html>

3、循环中的闭包结构

<!DOCTYPE html>
<html><head><title>03_循环中的闭包结构.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>This is my HTML page. <br></body><script type="text/javascript">/** * 定义了一个函数f()* 		* 定义了一个空的数组a* 		* 定义了一个局部变量i,没有初始化* 		* 遍历:* 			* 初始化局部变量i:0,1,2,3* 			* 初始化数组a:a[0],a[1],a[2] - function(){return i;}* 		* 返回值为数组a* 	* 定义一个全局变量fun,初始化为函数f()的调用(数组a)* 	* 调用全局变量fun*/
//	function f(){
//		var a = [];
//		var i;
//		for(i = 0; i < 3; i++){
//			a[i] = function(){
//				return i;
//			}
//		}
//		return a;
//	}
//	
//	var fun = f();
//	
//	alert(fun[0]());		//output	3
//	alert(fun[1]());		//output	3
//	alert(fun[2]());		//output	3//	function f(){
//		var a = [];
//		var i;
//		for(i = 0; i < 3; i++){
//			a[i] = (
//				function(x){
//					return x;
//				}
//			)(i);
//		}
//		return a;
//	}
//	
//	var fun = f();
//	
//	alert(fun[0]);		//output	0
//	alert(fun[1]);		//output	1
//	alert(fun[2]);		//output	2//	function f(){
//		var a = [];
//		var i;
//		function n(x){
//			return x;
//		}
//		for(i = 0; i < 3; i++){
//			a[i] = n(i);
//		}
//		return a;
//	}
//	
//	var fun = f();
//	
//	alert(fun[0]);		//output	0
//	alert(fun[1]);		//output	1
//	alert(fun[2]);		//output	2function f(){var a = [];var i;for(i = 0; i < 3; i++){a[i] = i;}return a;}var fun = f();alert(fun[0]);		//output	0alert(fun[1]);		//output	1alert(fun[2]);		//output	2</script>
</html>






  相关解决方案