闭包传入参数 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值