JS有关闭包变量的问题

这里的(i)的作用是什么?为什么之前都没见过这种用法。与下面的函数的主要区别是什么,为什么解决了下面函数闭包中只能取得变量的最后一个值的问题?出自Javascript高级... 这里的(i)的作用是什么?为什么之前都没见过这种用法。
与下面的函数的主要区别是什么,为什么解决了下面函数闭包中只能取得变量的最后一个值的问题?

出自Javascript高级程序设计
展开
 我来答
xi8km9
2015-09-27 · TA获得超过1086个赞
知道小有建树答主
回答量:688
采纳率:50%
帮助的人:725万
展开全部

请先分辨下以下写法

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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式