01
今天在读 jQuery代码的时候,发现下面的写法:
02
(function( window, undefined )
{
03
… // code goes here
04
})(window);
05
window 肯定是没问题, 表示
BOM 浏览器对象模型中的 window 对象。但是这里为什么会有一个名为 undefined
的形参呢?起初的时候很不理解。去技术群请教了一下,才真正理解了这里的原因。
06
原来,Javascript 中的 undefined
并不是作为关键字(全部Javascript关键字列表)出现的。因此可以允许用户对其赋值。例如:
07
varundefined =
‘myValue’;
08
如此一来,假如 jQuery 中使用下面的写法:
09
(function( window )
{
10
… // code goes here
11
})(window);
12
必然造成中间代码里的
undefined 遭到污染。因为在默认情况下,对于一个未定义的变量,它的值应该是
undefined,假如用户使用形如
13
varundefined = ‘myValue’;
14
//
或者
15
window.undefined = ‘myValue’;
16
的代码进行赋值,那么,jQuery 中的
undefined 的值就变成了用户指定的值(这里是字符串 ‘myValue’)。这样会造成 jQuery
内部异常。
17
18
而 jQuery 采用的这种写法,就很好的避免了这个问题。在执行匿名函数的时候,只传递一个参数
window, 而不传递 undefined,那么函数体中的 undefined 局部变量的值,刚好就是 undefined.
甚为巧妙啊。
19
20
比较下面几段代码:
21
22
<script
type=”text/javascript”>
23
(function(window,
undefined){
24
alert(undefined);
25
})(window);
26
</script>
27
28
<script
type=”text/javascript”>
29
var undefined =
‘myValue’;
30
(function(window){
31
alert(undefined);
32
})(window);
33
</script>
34
35
<script
type=”text/javascript”>
36
var undefined =
‘myValue’;
37
(function(window,
undefined){
38
alert(undefined);
39
})(window);
40
</script>
41
42
<script
type=”text/javascript”>
43
var undefined =
‘myValue’;
44
window.undefined =
‘myValue_2′;
45
(function(window){
46
alert(undefined);
47
})(window);
48
</script>
49
50
<script
type=”text/javascript”>
51
var undefined =
‘myValue’;
52
window.undefined = ‘myValue_2′;
53
(function(window,
undefined){
54
alert(undefined);
55
})(window);
56
</script>
作者:leon_lau
浙公网安备 33010602011771号