JS中的作用域及闭包,沙箱

本文深入讲解JavaScript中的递归原理、作用域与闭包的概念及其应用,同时探讨了沙箱环境和事件流等重要主题。

js中的递归

1.什么是递归

       是指在函数中调用函数本身,递归需要具备结束条件

2.作用域,作用域链及预编译

   a .作用域:指变量的应用范围

    js中没有块级作用域....一对括号中定义的变量,这个变量可以在大括号外使用

eg: {

       var sum=0;

}

Console.log(sum);

b.作用域链:变量的使用,从里向外,层层的搜索,搜索到了就可以直接使用了    层层搜索,要是没有 结果就是错误

eg:         var s=10;作用域链级别为0

function f1(){

              var s=20;作用域链级别为1

       function f2(){

              var s=30;作用域链级别为2

              console.log(s);

       }

}

  1. 预解析

在当前作用域下,js运行之前,会把带有varfunction关键字的事先声明,并在内存中安排好。然后再从上到下执行js语句。预解析只会发生在通过var定义的变量和function上。

Eg:

       f();此时可以调用函数,因为预编译对函数先进行了读取

 function f(){

              Console.log(“8888888888”);

}

 

相反

sum();调用出错,是因为预编译存储了变量sum而不是函数

Var sum=function(){

       Console.log(“6666666666”);

}

四.Js中的闭包

 

1.什么是闭包

函数A,有一个函数B,函数B中可以访问函数A中定义的变量或是数据,此时就形成了闭包

  1. 闭包的作用:

               延缓数据,延长作用域链,

2.闭包的模式有函数闭包和对象闭包

1.函数模式的闭包
//			function f1(){
//				var num=10;
//				function f2(){
//					console.log(num);
//					
//				}
//				f2();//打印num
//			}
//				f1();调用f1(),函数内部执行f2();即打印num;
//	2.对象模式的闭包
//		function f1(){
//			var sum=20;
//			var obj={
//				age:sum,
//			};
//			console.log(obj.age);
//		}
//		f1();//调用f1的实质是打印obj.age的值
//	3.闭包的其他形式
//		function f1(){
//			var sum=30;
//			return function(){
//				console.log(sum);
////				return sum;
//			}
//		}
//		var n=f1();//f1()返回的是一个函数,因为f1 return了所以得有一个变量接收,n相当于是给返回函数重新起的名字
////		console.log(n);//输出的是函数整体
//		n();

		</script>

 

五.沙箱

       是指一种虚拟的环境, 在一个虚拟的环境中 模拟真实世界,做实验, 实验结果 和真实世界的结果是一样的,但是不会影响真实世界

 

Eg:

       var str='白天不懂夜的黑';

       // 沙箱

       (fucntion(){

              var str='黑夜不懂得白天的寂寞';

              str=str.substr(2);

              console.log(str);

              }());

str=str.substr(2);

console.log(str);

六.事件流

事件流是指从页面中接受事件的顺序

事件流分为两种模式:冒泡和捕获

 

####事件绑定      DOM标准 提供的方法 addEventListener

####事件移除      DOM标准 提供的方法 removeEventListener

####阻止冒泡      通过事件对象 Event 的方法 stopPropagation();

####阻止默认      对象的方法 preventDefault();

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值