小羊也疯狂 2017-03-10 11:50 采纳率: 100%
浏览 1012
已采纳

关于高程上j s闭包的代码看不懂,谁给解释一下 ,书上讲的太少了

图片说明
1.第7行的()是立即执行吗?为什么要立即执行?为什么括号里面有个i?
2.第四行 书上说:“在调用每个匿名函数时 我们传入了变量i ,将i的当前值赋给num。在这个匿名函数内部,创建并返回了一个访问num的闭包。”
完全看不懂。 i是怎么传到num的? 都是闭包,num最后也等于10,和i有什么区别?
3. 另外一个小问题 string是个基础类型,书上读到一句话:“基础类型值在内存中占据固定大小空间”
那么 因为我用的时候可能是个很长的字符串,每个string配置的空间肯定得非常非常大才行,但是使用一般长度的字符串时,这样是不是会造成内存浪费?

  • 写回答

3条回答 默认 最新

  • 当作看不见 2017-03-10 12:12
    关注
    1. 是立即执行函数,括号表示执行 函数 + () 就是执行函数 ,那括号里面的不就是参数嘛。 2.这里是有区别的,我么获取resulti,就可以获取到对应的数。如果只是数字肯定是没有区别的下面举例 for(var i=0;i<p.length;i++){ p[i].onclick=function(){ alert(p[i]); } } 没有使用闭包,假设P是一个P标签的集合,点击任何一个P标签都会是undefined ,你在匿名函数加一个输出i ,就会发现i的值全都等于P.legnth+1;这就需要闭包或者this 3.这个问题是不对的,string 是不是基础类型? var str=“abc”; 和 var str1=new String("abc");这两个你使用instanceof 判断一下,第一个是string ,第二个是object ,但是他们还是相等的。 在静态语言中string 是不能被修改的,每次修改string ,实际就是重新生成一个新的string ,而丢掉原来的,对于修改频繁的都是使用数组存储字符串,而数组存储字符串是有一个算法的,你声明一个 长度为10的字符串会给你一个15长度的数组,如果你的操作使数组容不下,那新生成一个数组,容量+50%。这样子玩的。每一个变化都有算法给你控制的
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大