JS有关闭包变量的问题
这里的(i)的作用是什么?为什么之前都没见过这种用法。与下面的函数的主要区别是什么,为什么解决了下面函数闭包中只能取得变量的最后一个值的问题?出自Javascript高级...
这里的(i)的作用是什么?为什么之前都没见过这种用法。
与下面的函数的主要区别是什么,为什么解决了下面函数闭包中只能取得变量的最后一个值的问题?
出自Javascript高级程序设计 展开
与下面的函数的主要区别是什么,为什么解决了下面函数闭包中只能取得变量的最后一个值的问题?
出自Javascript高级程序设计 展开
1个回答
展开全部
请先分辨下以下写法
A = function(){}
function D(){}
B = function(){}()
function E(){}()
function D(){}是个普通的FunctionDeclaration即函数声明
所以如果你尝试执行function E(){}()是会报错的, 声明无法直接调用
而A = function(){}涉及赋值和匿名函数, 对於赋值来讲, =右边被视为ExpressionStatement, 即一个表达式
表达式的解析中允许CallExpression即直接调用
所以看上面的代码, 它的特点是开辟了新的空间(闭包)转存i为num
而下面的i仍旧是在createFunctions这一层的, 故而只能访问到最後一个值
其实这并不是最常见的形式, 一般你在各类库代码都会看到形如
~function(){}()
!function(){}()
(function(){})()
等形式进行立即执行调用
追问
又学到书里没的知识了。。去网上找点别的资料熟悉熟悉
追答
顺带一提, 立即执行函数的常用叫法是IIFE
你想瞭解JS的解释方式可以借助esprima
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询