`
deng131
  • 浏览: 661696 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

闭包传入参数 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
5
分享到:
评论
1 楼 deng131 2012-10-29  
在zepto.js代码中也有同样的处理方式:
var undefined, key, $$, classList, emptyArray = [], slice = emptyArray.slice,
 document = window.document,


http://stackoverflow.com/questions/2534260/var-undefined-true

相关推荐

    数据库求属性集闭包&函数依赖闭包

    3) 计算属性集闭包的算法,在课件里有详细说明。方法很简单,但用文字描述很抽象。。。。不解释。。。 4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;...

    Java闭包 Java闭包

    在2013年发布的 JavaSE8 中包含一个叫做 ...闭包允许我 们创建函数指针,并把它们作为参数传递。在这篇文章中,将粗略的看一遍Java8的特性,并介绍 Lambda表达式。而且将试着放一些样例程序来解释一些概念和语法。

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    (Swift)闭包作为方法参数

    (Swift)闭包作为方法参数

    传递闭包实现

    即在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系。 例如,如果 X 是(生或死)人的集合而 R 是关系“为父于”,则 R 的传递闭包是关系“x 是 y 的祖先”。再比如,如果 X 是空港的...

    关系闭包的计算

    实验目的:熟悉warshall算法,掌握求关系的自反闭包,对称闭包和传递闭包的方法。 实验内容:从键盘输入一个关系的关系矩阵,自动求出自反闭包、对称闭包和传递闭包。 计算传递闭包用Warshall算法。 #include...

    C语言实现三种闭包算法(传递,自反,对称闭包)

    C语言实现三种闭包算法,能够实现传递,自反,对称闭包

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    Swift视频教程 基础语法系列 闭包参数类型推断

    Swift视频教程 基础语法系列 闭包参数类型推断

    Swift之闭包ClosureDemo

    Swift之闭包ClosureDemo

    闭包问题html

    闭包文件

    深入理解javascript函数参数与闭包

    函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数。本文对javascript函数参数与闭包进行详细分析介绍。需要的朋友一起来看下吧

    计算NFA中ε闭包

    计算NFA中各个状态的闭包,从键盘上输入一个NFA的描述信息(输入格式自行定义),将 该NFA的描述信息保存到合适的数据结构中,然后计算出NFA中每个状态的ε_closure。

    Javascript 闭包完整解释

    Javascript 闭包完整解释

    Go语言视频教学(4).txt

    │ day4 递归&闭包&数组切片&map&锁.zip │ iPhoneiPad上如何阅读文件?.pdf │ PBBreader for Mac安装说明.docx │ PBBReaderForOSX1.0.3.0028α.pkg │ PBBReader_Setup_V8.4.1.zip │ QQ图片20170628194702.png

    C++对称闭包对称闭包

    用矩阵求对称闭包。简洁,轻松学习,相互交流。

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    js闭包详细讲解

    js闭包的详细讲解

    Python闭包实例closure.py

    Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用

Global site tag (gtag.js) - Google Analytics