(function (window, undefined){})(window)

来自:http://zhidao.baidu.com/question/191081977.html

问题

第一句(function (window, undefined){主体})(window)这么写是什么意思,谁知道给我说说吧

解决:

这是javascript的匿名函数,其实就是定义了一个匿名方法,然后再调用它。
什么时候可以用这种方式呢?就是当方法须被调用且只会被调用一次的时候。
闭包的好处之一:对js进行压缩的时候,
(function(window, undefined))里的window和undefined
均可以替换成其他简写字符,从而减少文件大小,因为他们被视为局部变量使用。

window: 表示 BOM 浏览器对象模型中的 window 对象,
对于undefined,因为他不是javascript关键字。
如果jQuery的写法是这样的
(function( window ) {
    ... // code goes here
})(window);
必然造成中间代码里的 undefined 遭到污染。
因为在默认情况下,对于一个未定义的变量,它的值应该是 undefined,
假如用户使用
var undefined = 'myValue';
// 或者
window.undefined = 'myValue';
进行赋值,那么,jQuery 中的 undefined 的值就变成了用户指定的值(这里是字符串 ‘myValue’)。这样会造成 jQuery 内部异常。
而 jQuery 采用的这种写法,就很好的避免了这个问题。
最后那个(window),表示调用此函数时候只传入的window对象。
jQuery在执行匿名函数的时候,只传递一个参数 window,而不传递 undefined,
那么函数体中的 undefined 局部变量的值,刚好就是 undefined,此举甚为巧妙!
举个例子,如下:
(function( a, b) {
if(b) alert(a + b);
else alert(a);
})(1);
结果是:3
(function( a, b) {
if(b) alert(a + b);
else alert(a);
})(1);
结果是:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值