六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 35|回复: 0

闭包传入参数 window & undefined

[复制链接]

升级  28.33%

79

主题

79

主题

79

主题

举人

Rank: 3Rank: 3

积分
285
 楼主| 发表于 2013-1-29 09:03:03 | 显示全部楼层 |阅读模式
大家在前端开发中对闭包应该和熟悉了,也就是几种常见的闭包方式:

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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表