大家在前端开发中对闭包应该和熟悉了,也就是几种常见的闭包方式:
1:
2:
...
今天主要说的是2这样闭包方法中传参数问题,在各种前端js框架中经常也会见到这样代码,如果不仔细分析真的很难想到这样使用的用意。
在闭包行参使用undefined而不是从外部1处传入参数,这样做是考虑到在undefined在外部被赋值情况,那么这时候在闭包内部使用undefined就会出现问题了,那么就需要
为了不让内部的undefined不会被污染,在形参中默认加上undefined,所以在jquery等js库源代码会看到
这样代码。在形参中传入默认window也是;类似一样的原理。
最后可以测试下:
参考:
http://www.iamued.com/qianduan/1450.html
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