deng131 发表于 2013-1-29 09:03:03

闭包传入参数 window & undefined

大家在前端开发中对闭包应该和熟悉了,也就是几种常见的闭包方式:

1:
var fn = function(i){      var j = i;      return function(){             return j;      }}

2:
(function(undefined){   //do something})

...

今天主要说的是2这样闭包方法中传参数问题,在各种前端js框架中经常也会见到这样代码,如果不仔细分析真的很难想到这样使用的用意。
(function(undefined){   //do something})() //1
在闭包行参使用undefined而不是从外部1处传入参数,这样做是考虑到在undefined在外部被赋值情况,那么这时候在闭包内部使用undefined就会出现问题了,那么就需要
if(typeof undefined === 'undefined') {// } 判断。在外部不传参数情况下,闭包内部使用形参在没有赋值时undefined将会保持原本含义,这是由JavaScript 作用域规则决定。
为了不让内部的undefined不会被污染,在形参中默认加上undefined,所以在jquery等js库源代码会看到
(function(window,undefined){   //todo something})()
这样代码。在形参中传入默认window也是;类似一样的原理。

最后可以测试下:
var undefined = 123;(function(undefined){console.info(undefined);})() //在参数中传入undefined和不传情况下会输出什么?

参考:
http://www.iamued.com/qianduan/1450.html
页: [1]
查看完整版本: 闭包传入参数 window & undefined