锁定老帖子 主题:之前没看懂的js代码,今天看懂了
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-21
JavaStudyEye 写道 请问
如下代码的含义是啥啊?为啥要加undefined呢? (function($, undefined){ js code... })(jQuery); 比较蛋疼的问题。你看很多js库都有window.undefined = window.undefined; 为啥? 早期版本的某些浏览器没有全局变量undefined,所以,右边的 window.undefined就会返回undefined,然后把它赋值给window.undefined。其实和window.undefined = window.a,或者window.b没什么分别。 然后说jQuery,它通过不传入第二个参数来定义undefined而已。也就是 有人说的: function fn(a){ alert(a); } fn(); 把a改成undefined就行了。 比较巧妙的是,jQuery是在它的整个函数作用域内声明undefined,而非在全局作用域。它对全局变量的污染只有两个:$和jQuery. |
|
返回顶楼 | |
发表时间:2011-06-21
建议你看看这个:http://hzjavaeyer.group.iteye.com/group/wiki/2295-JavaScript-Core
|
|
返回顶楼 | |
发表时间:2011-06-21
BuN_Ny 写道 JavaStudyEye 写道 请问
如下代码的含义是啥啊?为啥要加undefined呢? (function($, undefined){ js code... })(jQuery); 比较蛋疼的问题。你看很多js库都有window.undefined = window.undefined; 为啥? 早期版本的某些浏览器没有全局变量undefined,所以,右边的 window.undefined就会返回undefined,然后把它赋值给window.undefined。其实和window.undefined = window.a,或者window.b没什么分别。 然后说jQuery,它通过不传入第二个参数来定义undefined而已。也就是 有人说的: function fn(a){ alert(a); } fn(); 把a改成undefined就行了。 比较巧妙的是,jQuery是在它的整个函数作用域内声明undefined,而非在全局作用域。它对全局变量的污染只有两个:$和jQuery. 不算太蛋疼,因为undefined是window下的一个变量,注意undefined和null不同,后者是关键字,前者只是个变量,这意味着寻找undefined需要2个过程: 1、延作用域链一直到Global环境,即window 2、在window这个Hash Object下找一个叫undefined的对象 关于第一点,看你的函数嵌套作用域有几层,作用域链的查找是有性能损失的 关于第二点,众所周知window大概是正常的环境下最大的一个对象了,各种第三方的脚本都往里面扔东西,比如Javaeye的这个回贴页面,我看了一下在Chrome下有481个对象挂在window下,且window是个宿主对象,并非原生的javascript对象,其访问有额外的性能损失 综上,把undefined通过参数的形式加入函数的VariableObject中,可以一定程度上加快对undefined的访问速度,如果经常用到的话(比如jquery处理重载),还是很适合的 PS:经我测试,部分浏览器似乎对undefined有特殊处理,不受window下对象的数量和作用域链的长度影响…… |
|
返回顶楼 | |
发表时间:2011-06-21
(函数名)(参数),这样理解对吗?
|
|
返回顶楼 | |
发表时间:2011-06-21
最后修改:2011-06-21
沙舟狼客 写道 (函数名)(参数),这样理解对吗?
从代码上看是 (函数定义)(参数) 函数定义,应该是作为js对象存在的。 测试如下 : <script> var test=function a1(){alert('a1')} test(); function a2(){alert('a2')} var b=a2; b(); </script> |
|
返回顶楼 | |
发表时间:2011-06-21
呵呵,自己真是菜到不行,工作几年,其实比那些在校的很多地方都不如。。
|
|
返回顶楼 | |
发表时间:2011-06-22
恭喜楼主,进步就是这样,在每一个细小的地方~~ 我也在某个问题上突然顿悟过,感觉很好!
|
|
返回顶楼 | |
发表时间:2011-06-22
不错,学习了,“匿名函数立刻执行”~
|
|
返回顶楼 | |
发表时间:2011-06-22
呵呵 新手的盛宴!
|
|
返回顶楼 | |
发表时间:2011-06-24
一个匿名函数,lambda表达式啊
|
|
返回顶楼 | |