jQuery源码解读一

(function(window,undefined){...})(window);

这是一个典型的自执行的匿名函数。

为什么会有一个名为undefined的形参呢?

undefined不是常量,可以把它设置为其他值。

undefined表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。

JavaScript中,undefined并不是作为JavaScript的保留关键字,我们可以执行var undefined = ‘123‘对undefined赋值。

所以如果先执行var undefined = ‘123‘;再去执行(function(window){...//code goes there})(window),会造成中间代码被污染。

但是jQuery的(function(window,undefined){...})(window)用法,很好的避免了这个问题。

执行匿名函数的时候,只传递一个参数window,而不传递undefined,那么函数体重的undefined局部变量的值,刚好就是undefined,处理方式甚是巧妙。

不过,我发现目前以下的四种方式返回结果都是undefined,是不是说明现在的JavaScript也已经很好的避免了undefined污染的问题呢?

    <script type="text/javascript">
        (function (window, undefined) {
            alert(undefined);
        })(window);
    </script>
    <script type="text/javascript">
        var undefined = ‘myValue‘;
        (function (window) {
            alert(undefined);
        })(window);
    </script>

    <script type="text/javascript">
        var undefined = ‘myValue‘;
        (function (window, undefined) {
            alert(undefined);
        })(window);
    </script>

    <script type="text/javascript">
        var undefined = ‘myValue‘;
        window.undefined = ‘myValue_2‘;
        (function (window) {
            alert(undefined);
        })(window);
    </script>

    <script type="text/javascript">
        var undefined = ‘myValue‘;
        window.undefined = ‘myValue_2‘;
        (function (window, undefined) {
            alert(undefined);
        })(window);
    </script>
时间: 2024-11-08 23:07:46

jQuery源码解读一的相关文章

jQuery源码解读第5章---对Callbacks的解读

jQuery.Callbacks() 是一个多用途的回调函数列表对象 提供了一种强大的方法来管理回调函数队列 先来看看Callbacks的常见的用法 1-------不带参数 先看看不用回调函数的例子 eq function a1(){ console.log('a1') } (function(){ function a2(){ console.log('a2') } })() a1() // a1 a2() //就不行了 这时候我们就可以使用回调函数Callbacks 了 var dfd1

jQuery源码解读第4章---对extend的解读

为什么我们一开始就说extend呢 其实我读源码的过程中,发现其实我们方法就在源码中都调用了extend Callbacks Deferred这些工具方法 所以我们很有必要先学习这些,,,,,,,,,,,这样对我们后续的学习很有帮助 对extend的学习,,,,,首先看下extend我们平时是怎么用的 1...合并对象 extend(dest,src1,src2,,,,,) 它的含义就是将src1,src2......合并到dest中 然后放回的结果就是合并后的dest eq: var dest

jQuery源码解读三选择器

直接上jQuery源码截取代码 // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // Define a local copy of jQuery 可以看出创建了jQuery.fn.init这样的一个函数返回给$,这样就可以使用$实例了 jQuery = function (selector, context)

jQuery源码解读001-总体目录

web: http://jquery.com/ docs: http://api.jquery.com/ download:http://jquery.com/download/ learn:http://learn.jquery.com/ Chapters About jQuery Using jQuery Core Events Effects Ajax Plugins Performance Code Organization jQuery UI jQuery Mobile 此外,还有几个

jQuery源码解读-事件分析

最原始的事件注册 addEventListener方法大家应该都很熟悉,它是Html元素注册事件最原始的方法.先看下addEventListener方法签名: element.addEventListener(event, function, useCapture) event:事件名,例如“click”,这里要提醒的一点是不要加前缀“on”;    function:事件触发时执行的函数;    userCapture:默认为false,表示event事件在冒泡阶段触发.如果设置为true,则

jQuery源码解读 - 数据缓存系统:jQuery.data

jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据如何关联着这个Element一直是web前端的大姨妈,而最初的jQuery事件系统照搬Dean Edwards的addEvent.js:将回调挂载在EventTarget上,这样下来,循环引用是不可忽视的问题.而在web前端中,数据和DOM的关系太过基情和紧张,于是jQuery在1.2中,正式缔造了

Jquery源码解读

* 先记录一些零散的知识,待之后整理,因为现在也在学习中 是以jquery2.0.3.js为例 1,map(),是对数组array的二次处理 2,$('div').pushStack($('span')).css({'background':'red'}).end().css({'color':'blue'}); end()是对栈的回溯, *

初识jQuery源码

为了深入学习下jQuery,最近打算看看源码,刚开始看这个我内心其实是拒绝的...第一印象就是好难理解,没办法硬骨头总是要去啃得,看了好多分析源码的文章博客,第一篇当然是Aaron的jQuery源码解读系列的开篇之整体架构.介绍的还是比较详细的,推荐~当然要抱着怀疑的眼光去看,不一定人家写的就是对的,敲出来验证下才是王道,这篇文章后的评论也可以看看,是大家对于该文章某些地方的质疑. 看完这篇文章其实我是半懂的状态,后来又看到一篇总结的博文,大概是在此基础上总结的. 点这里 我并不想重复的记录下相

js便签笔记(9)——解读jquery源码时记录的一些知识点

近来一直利用业余时间在看jquery2.1.1源码,大约看了两千行了.平时看的时候,做了一些笔记,贴出来分享. 1. Array.prototype.slice.call 可以将伪数组转化为真正的数组 其实,这里所谓的"伪数组"就是有length属性,并且有"0"."1"."2"等这些属性的对象,如下代码: var obj = { 0: "A", 1: "B", 2: "C&q