网站制作公司怎么样,响应式官方网站,网站等保测评怎么做,注册安全工程师证书在使用for循环的时候#xff0c;假如需要在循环体中添加一个匿名函数处理其他的事情#xff0c;那么#xff0c;在这个匿名函数内#xff0c;如果需要用到对应的i#xff0c;因为闭包的缘故#xff0c;循环体循环结束后才返回i#xff0c;所以i最终为最后一次的数值。闭…在使用for循环的时候假如需要在循环体中添加一个匿名函数处理其他的事情那么在这个匿名函数内如果需要用到对应的i因为闭包的缘故循环体循环结束后才返回i所以i最终为最后一次的数值。 闭包即函数有权访问另一函数的局部变量常用方法为在函数内部创建另一个需要引用这个函数内部变量的函数。 解决方式1 通过匿名函数传参因为匿名函数取得参数是每次for循环里的i所以每次打印的值为012...... 匿名函数自我执行的方法是在函数体外套一对圆括号形成一个表达式在圆括号后再加另一个圆括号里面可传参数。此方法即IIFE又叫立即执行函数表达式。 写到这里还需要说一下函数声明和函数表达式的区别 1.函数声明必须有标识符即函数名 2.函数声明存在变量提升 3.函数声明不能出现在循环判断、try、with等语句的代码块中 解决方式2 此方法和上述方法有异曲同工之妙也是在匿名函数体外部取到了循环体中的i 在JS中每一个函数被调用的时候都会创建一个执行上下文在该函数内部定义的变量和函数只能在该函数内部被使用正是因为这个上下文使得我们在调用函数的时候能创建一些私有变量。 为什么a()()两次打印都是1是因为每次执行a()()的时候都给a重新赋值1而b()/c()执行的只是a return出来的匿名函数 为什么报错 因为在javascript解析代码时当遇到function关键字时会默认把它当作一个函数声明而不是函数表达式如果没有显示的表达成函数表达式就报错。因为函数声明需要一个函数名而上面的代码中函数没有函数名。在执行到第一个左括号时报错 为什么在加了函数名之后依然报错 在一个表达式后面加上括号表示立即执行而在一个语句后加上括号该括号和之前的语句完全不搭边而只是一个分组操作符用来控制运算中的优先级当js解析到括号时发现里面为空所以报错。在执行到第二个右括号时报错 因为在js中括号内部不能为语句所以js解析到括号时紧接着发现了function关键字所以自动把括号内的语句当作表达式而不是函数声明。 所以立即执行函数你可以这么写 而上面我们用立即执行函数加闭包取到了循环体中的i可见合理利用立即执行函数加上闭包还能保存变量的状态。 在模块化中也可以用立即执行函数来处理模块化可以减少全局变量造成的空间污染构造更多的私有变量。 转载于:https://www.cnblogs.com/ricoliu/p/6652732.html