JS 闭包
2022/2/23 23:21:45
本文主要是介绍JS 闭包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
当函数在被使用时就不删除(回收)
内层的数据被使用,外层的数据也不删
function fn(){ let n = 1 return function(){ let m = 1 return function () { console.log('n:' + ++n) console.log('m:' + ++m) } } } let a = fn()(); a() //n:2 m:2 a() //n:3 m:3
构造函数
function FN(){ let n = 1 this.sum (){ console.log('n:' + ++n) } } 相当于: function FN(){ let n = 1 function sum (){ console.log('n:' + ++n) } return { sum: sum } } let a = new FN() //sum被使用,不删 a.sum() //n:2 a.sum() //n:3 a.sum() //n:4 let b = new FN() //新内存空间 b.sum() //n:2 b.sum() //n:3
for--异步与作用域
// 输出十个 10 for (var i = 0; i < 10; i++) { setTimeout(function(){ console.log(i); }) } // 输出 0123456789 for (let j = 0; j < 10; j++) { setTimeout(function(){ console.log(j); }) }
- 异步
1 JS是单线程环境.
2 对于同步和异步, 先执行同步代码, 碰到异步的代码会将其插入到任务队列当中等待, 直到同步代码执行完毕,才执行异步代码
3 setTimeout是延时,比如上面这段代码中,第二个参数延时时间是0,也就是说执行到它的时候会在0ms之后将它插入到任务队列当中。(此时setTimeout里的回调没有执行)
4 同步代码都执行完成之后,那么JS引擎就空闲了,这个时候就轮到任务队列中的异步代码依次加载了。
- 作用域
立即执行函数?, 其实是赋值与调用
for(var i=1;i<10;i++){ (function(a){ setTimeout(function(){console.log(a);},10000); })(i) } //十秒之后,立刻输出1 2 3 4 5 6 7 8 9(中间无间隔) //与立即执行函数无关,其实是将i的值保存到函数内的局部变量里了 for(var i=1;i<10;i++){ function fn(a){ setTimeout(function(){console.log(a);},10000); } fn(i) }
这篇关于JS 闭包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程