js闭包

学习Javascript闭包(Closure)

删除回忆录丶 提交于 2020-12-12 03:54:15
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。   function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意, 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!   function f1(){     n=999;   }   f1();   alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。 那就是在函数的内部,再定义一个函数。   function f1(){     var n=999;     function f2(){

js闭包

寵の児 提交于 2020-11-08 15:05:49
越来越觉得国内没有教书育人的氛围,为了弄懂JS的闭包,我使出了我英语四级吃奶的劲去google上搜寻着有关闭包的解释,当我看到stackoverflow上 这一篇解答 ,我脑中就出现了一句话:就是这货没跑了! 不才译文见下,见笑了。 Peter Mortensen问: 就像老Albert所说的,“如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂。”好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了。 你们会怎么把它解释给一个充满好奇心的六岁孩子听呢? 注:我看过StackOverflow上给出的示例,但根本没用。 Ali的回答: 当function里嵌套function时,内部的function可以访问外部function里的变量。 function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2) 不管执行多少次,都会alert 16,因为bar能访问foo的参数x,也能访问foo的变量tmp。 但,这还不是闭包。当你return的是内部function时,就是一个闭包。内部function会close-over外部function的变量直到内部function结束。 function foo(x) {

js面向对象的三大特征加闭包

泄露秘密 提交于 2020-02-08 19:54:48
建立在抽象的基础上 一、封装: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link href="css/game.css" type="text/css" rel="stylesheet" /> <script language="JavaScript" type="text/javascript"> function Person(name,age1,sal1){ this.name=name; // 私有 var age=age1; var salary=sal1; this.show=function(){ window.alert(age+" "+salary); } //私有可以访问属性,但是外部调用不行 function show2(){ window.alert(age+" "+salary); } } var p1=new Person("sp",20,50000); window.alert(p1.name+" "+p1.age); p1.show(); </script> </head> <body> </body> </html> View Code proptype对所有的方法添加方法,当时不能访问私有对象和方法 <!DOCTYPE html> <html>

static变量与js闭包

我与影子孤独终老i 提交于 2019-12-20 19:49:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 0、一句话定义闭包,子函数可以定义父函数的局部变量 1、几个关键字 define 定义宏(C语言),定义常量(php) static 定义相当于位置在函数内的全局变量(生命周期与函数定义域无关),但只对函数可见,函数可改变其值 const 定义常量(PHP 5.3.0+) 2、php使用静态变量: <?php function add(){ static $n = 0; $n++; echo $n . '<br />'; } add();//输出 1 add();//输出 2 3、js使用闭包 function f1(){ var n=0; function f2(){ n++; console.log(n); } return f2; }   var add=f1();   add();//输出 1   add();//输出 2      //闭包两大特点:1、访问局部变量,2、一直保存在内存中 4、个人js闭包的理解,欢迎斧正 1、由于js没法像一般语言C++,PHP等使用static达到函数内全局变量的效果,故使用闭包的一直保存在内存的特性达到了这个效果,如上面php和js代码的效果 2、闭包的特点使函数拥有了类的感觉,访问局部变量好比访问私有属性,闭包相当于类的公共函数,调用外部函数好比类实例化

js作用域for循环闭包问题

匿名 (未验证) 提交于 2019-12-03 00:11:01
for ( var i = 0 ; i < btnArr . length ; i ++){ btnArr [ i ]. addEventListener ( 'click' , function (){ tabCardShow ( i ); }); } 普通的for循环,触发事件时传入的 i 的值一定是等于 btnArr.length ,i 的值停留在了循环执行完毕之后,并不符合初衷。 原因:i只作用于 for循环的作用域,所有 元素绑定时传入的都是该作用域的同一个 i 值,而 i 值停留在了循环最后一次的值上。 for ( var i = 0 ; i < btnArr . length ; i ++){ ( function ( i ){ btnArr [ i ]. addEventListener ( 'click' , function (){ tabCardShow ( i ); }) })( i ); } 原因:闭包传入i值,相当于每次循环都创造了一个作用域,向传入了 i 值,避免了污染,循环了多少次 ,就有多少个作用域,就有多少个 i 值。 来源:博客园 作者: 见信 链接:https://www.cnblogs.com/JianXin1994/p/11576077.html

js模块化 javascript 模块化 闭包写法 闭包模块化写法

匿名 (未验证) 提交于 2019-12-02 20:59:24
var main = main || {}; ; (function (main) { 'use strict'; //私有变量 var _s1 = 'Hello '; var _s2 = 'World!~'; //私有方法 var _func = { helloWorld: function (str1, str2) { return str1 + str2; } }; //公有方法 main.method = { add: function (a, b) { return a + b; }, subtract: function (a, b) { return a - b; }, multiply: function (a, b) { return a * b; }, divide: function (a, b) { return a / b; }, total: function (a, b) { return _func.helloWorld(_s1, _s2) + this.add(a, b) + this.subtract(a, b) + this.multiply(a, b) + this.divide(a, b); } }; //将公有方法返回 return main.method; })(main); var t = main.method.total(1, 1

js作用域for循环闭包问题

烈酒焚心 提交于 2019-11-30 08:37:29
for(var i = 0;i<btnArr.length;i++){ btnArr[i].addEventListener('click',function(){ tabCardShow(i); }); } 普通的for循环,触发事件时传入的 i 的值一定是等于 btnArr.length ,i 的值停留在了循环执行完毕之后,并不符合初衷。 原因:i只作用于 for循环的作用域,所有 元素绑定时传入的都是该作用域的同一个 i 值,而 i 值停留在了循环最后一次的值上。 for(var i = 0;i<btnArr.length;i++){ (function(i){ btnArr[i].addEventListener('click',function(){ tabCardShow(i); }) })(i); } 原因:闭包传入i值,相当于每次循环都创造了一个作用域,向传入了 i 值,避免了污染,循环了多少次 ,就有多少个作用域,就有多少个 i 值。 来源: https://www.cnblogs.com/JianXin1994/p/11576077.html

2018大厂高级前端面试题汇总

亡梦爱人 提交于 2019-11-29 18:24:16
本人于7-8月开始准备面试,过五关斩六将,最终抱得网易归,深深感受到高级前端面试的套路。以下是自己整理的面试题汇总,不敢藏私,统统贡献出来。 面试的公司分别是:阿里、网易、滴滴、今日头条、有赞、挖财、沪江、饿了么、携程、喜马拉雅、兑吧、微医、寺库、宝宝树、海康威视、蘑菇街、酷家乐、百分点和海风教育。 以下是面试题汇总,前端进阶系列会持续深入更新面试题解,共勉! 阿里 使用过的koa2中间件 koa-body原理 介绍自己写过的中间件 有没有涉及到Cluster 介绍pm2 master挂了的话pm2怎么处理 如何和MySQL进行通信 React声明周期及自己的理解 如何配置React-Router 路由的动态加载模块 服务端渲染SSR 介绍路由的history 介绍Redux数据流的流程 Redux如何实现多个组件之间的通信,多个组件使用相同状态如何进行管理 多个组件之间如何拆分各自的state,每块小的组件有自己的状态,它们之间还有一些公共的状态需要维护,如何思考这块 使用过的Redux中间件 如何解决跨域的问题 常见Http请求头 移动端适配1px的问题 介绍flex布局 其他css方式设置垂直居中 居中为什么要使用transform(为什么不使用marginLeft/Top) 使用过webpack里面哪些plugin和loader webpack里面的插件是怎么实现的 dev