JS中闭包问题 骑猪看日落 2021-10-29 22:48 316阅读 0赞 看笔记上有人对这个说是个bug,其实是利用JS中栈内存在执行过程中没有释放的特点,而且还给了例子 <p>局部变量计数。</p> <button type="button" onclick="myFunction()">计数!</button> <p id="demo">0</p> <script> { var tmp = 2; //理论上在退出语句块后,这个变量要被释放掉的。包括内存可能被回收。但事实并非如此,会影响后面和他同名的变量 } var add = (function () { //var counter = 0; //这里注释掉.其实和上面的tmp一样的道理。这里在函数自己执行完后就应该销毁了的。 //return function () {return counter += 1;} //这里的counter已经不是上面的counter了,是一个全局变量。有初值,受上面影响,初值为0 return function () {return tmp += 1;} //这里tmp就是个全局变量。它是有初值的。为上面的2 })(); function myFunction(){ document.getElementById("demo").innerHTML = add();//3 document.getElementById("demo").innerHTML = add();//4 document.getElementById("demo").innerHTML = add(); //5 } </script> 感觉没有什么毛病,哈哈 然后看到六楼对此进行了错误指明,针对 5楼、6楼 的一些错误进行指明: 5楼:\{ var tmp = 2 \} JS 中语句块不能独立作用域,这样写等同于声明了一个全局变量 tmp = 2,所以不存在该语句块内代码执行完毕后 tmp 就被销毁的情况。 6楼:变量 add,以及 add 的 count 属性、plus() 方法都是公共的,这意味着其他代码可以直接修改你的 count 属性,造成不必要的麻烦 闭包要解决的问题是:一个函数可以拥有私有变量,并且外部可以通过闭包访问该私有变量,如特权方法(类似 JavaBean 的写法): <script> function Student(value) { var name = value; this.getName = function() { return name; }; this.setName = function(value) {name = value; }; } <script> 如果我没看七楼的答案,其实就会误认为六楼的正确性 从自己理解来看,六楼说的bug应该是想说利用全局变量这种特性,从而达到计数的问题,而七楼想要说明的问题是在其函数内部创建出一个私有属性,以此完成计数器,这好比java中的封装属性,其上是我对闭包的一些理解。 详情可以看菜鸟教程 [\[菜鸟教程闭包问题\]][Link 1] [Link 1]: https://www.runoob.com/js/js-function-closures.html
相关 js中的闭包 1.闭包:1.闭包时嵌套的内部函数 2.包含被引用变量(函数)的对象 (闭包在嵌套的内部函数中,可使用chrome查看) 2.闭包的产生:当一个嵌套的内部(子函数)引用了嵌 超、凢脫俗/ 2022年12月04日 01:27/ 0 赞/ 163 阅读
相关 js闭包 所谓闭包,就是变量 从外部开始,到达父函数体,然后再从父函数体内的函数(子函数) 返回到父函数体,简单一句话概括:函数外部调用函数内部的变量。 通过下面的代码给出结果,解释一 朱雀/ 2022年08月13日 14:00/ 0 赞/ 219 阅读
相关 js中的闭包 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti 朱雀/ 2022年06月07日 08:16/ 0 赞/ 202 阅读
相关 JS闭包 JS闭包 写在闭包之前: 上下文(context) 是一段程序运行所需要的最小数据集合。我们可以从上下文交换(context switch)来理解上下文,在多进程或多线 一时失言乱红尘/ 2022年05月25日 02:05/ 0 赞/ 271 阅读
相关 js闭包问题 > 闭包可以说是js的一个疑难问题,之所以难,是因为连概念都很复杂,在百度上搜了搜,解释一大堆,愣是没看懂,依照我的理解,如果你是初学者,就将它理解成一种跨越局部和全局的桥梁吧 柔情只为你懂/ 2022年03月21日 04:57/ 0 赞/ 181 阅读
相关 js闭包 闭包指的是:能够访问另一个函数作用域的变量的函数。 清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。 闭包就是将函数内部和函数外部连接起来的一座桥 偏执的太偏执、/ 2022年03月09日 01:36/ 0 赞/ 347 阅读
相关 JS中闭包问题 看笔记上有人对这个说是个bug,其实是利用JS中栈内存在执行过程中没有释放的特点,而且还给了例子 <p>局部变量计数。</p> <button type="b 骑猪看日落/ 2021年10月29日 22:48/ 0 赞/ 317 阅读
相关 js--闭包 前言 前一篇博客是介绍的作用域与作用域链,已经开始了JavaScript高级部分的学习,那么这篇博客简单的介绍一下js的闭包。 内容 所谓闭包就是函数 函数作 本是古典 何须时尚/ 2021年09月27日 04:24/ 0 赞/ 461 阅读
相关 js 闭包 <html> <head> <title>闭包</title> <meta charset="utf-8"> 梦里梦外;/ 2021年08月28日 01:13/ 0 赞/ 451 阅读
相关 js闭包 Js语言在函数内部可以直接读取全局变量,但函数外部无法读取函数内的局部变量 <script type="text/javascript"> var n=100 朱雀/ 2021年06月24日 16:00/ 0 赞/ 476 阅读
还没有评论,来说两句吧...