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);
}
}
- 预解析
在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好。然后再从上到下执行js语句。预解析只会发生在通过var定义的变量和function上。
Eg:
f();此时可以调用函数,因为预编译对函数先进行了读取
function f(){
Console.log(“8888888888”);
}
相反
sum();调用出错,是因为预编译存储了变量sum而不是函数
Var sum=function(){
Console.log(“6666666666”);
}
四.Js中的闭包
1.什么是闭包
函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或是数据,此时就形成了闭包
- 闭包的作用:
延缓数据,延长作用域链,
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();
本文深入讲解JavaScript中的递归原理、作用域与闭包的概念及其应用,同时探讨了沙箱环境和事件流等重要主题。
765

被折叠的 条评论
为什么被折叠?



