Underscore 是一个非常实用的Javascript类库。

通过研究他能提高自身的JS水平。

我们看到整个代码被 (function() { /*  代码 */ }.call(this)); 包裹了起来。

(function() {
// 代码
}.call(this));

这是什么意思?作用是什么?先不着急,我们通过一个个例子来学习。

这个其实很好理解

// 这是一个普通函数
var a = function(){
alert("11")
}

如果运行这段JS脚本,不会弹出11。因为没有调用a函数。

但是注意如果函数名后面添个(),就会立即运行这个函数

var a = function(){
alert("11")
} a()

函数一般是有名字的,比如上面的函数就叫a,没有名字的函数叫匿名函数。我们知道JS支持匿名函数。

JS中当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!

//立即弹出11
(function (){
alert("11")
})()

underscore的代码包裹在一个匿名自执行函数中。很多类库jQuery都是这么做。

好处:

1. 因为会立即执行,避免变量污染

(function() {
var jQuery = { VERSION : '1.0',
a: function(){
alert("11");
} };
window.jQuery = jQuery;
$ = jQuery;
})(); //$.a() $.VERSION;

call的用法

//而call(this)方法,是指当定义完后将this本身通过call()调用本身来实现立即执行。

//在浏览器环境 全局this 就是window对象

(function(){

//执行语句

}).call(this)

underscore.js 分析 第一天的更多相关文章

  1. underscore.js 分析 第三天

    // Create a safe reference to the Underscore object for use below. // 为Underscore对象创建一个安全的引用 // _为一个 ...

  2. underscore.js 分析6 map函数

    作用:通过转换函数(iteratee迭代器)映射列表中的每个值产生价值的新数组.iteratee传递三个参数:value,然后是迭代 index. _.map([1, 2, 3], function( ...

  3. underscore.js 分析 第四天

    查看underscore包含多少属性和方法 通过阅读JavaScript 获取对象的键的数组 var a = _; var arr = Object.keys(a); console.log(arr) ...

  4. underscore.js 分析 第二天

    Underscore源码中有这么句obj.length === +obj.length意思是typeof obj.length == number,即检测obj的长度是否是数字我的理解:这么写是来检测 ...

  5. underscore.js依赖库函数分析二(查找)

    查找: 在underscore.js封装了对dom查找的操作,find()和filter()函数,find()函数的查找操作是返回首个与条件相符的元素值,filter()函数是找到与条件相符的所有元素 ...

  6. HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改

    效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popb ...

  7. underscore.js依赖库函数分析一(遍历)

    Underscore简介: underscore是一个非常简洁,实用的javascript库,和jQuery封装类型差不多,但underscore是backbone的依赖 库,想运行backbone就 ...

  8. underscore.js 源码分析5 基础函数和each函数的使用

    isArrayLike 检测是数组对象还是纯数组 var property = function(key) { return function(obj) { return obj == null ? ...

  9. Underscore.js 1.3.3 源码分析收藏

    Underscore是一个提供许多函数编程功能的库,里面包含了你期待(在Prototype.js和Ruby中)的许多功能.但是没有扩展任何内置的Javascript对象,也就是说它没有扩展任何内置对象 ...

随机推荐

  1. 在一个应用中如果同一个Spring 的IOC容器被实例化两次就会出现 CannotAcquireResourceException 异常

    现象描述:我在一个Junit 的测试类中实例化IOC容器 : ac = new ClassPathXmlApplicationContext("applicationContext.xml& ...

  2. SOJ 1002/1003/1004 大整数相加/相乘/相除

    三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反 ...

  3. UVa 1220 - Party at Hali-Bula(树形DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. BZOJ1396:识别子串(SAM)

    Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample I ...

  5. docker-3-常用命令(下)

    importance 1.启动守护式容器 docker run -d 容器名   使用镜像centos:latest以后台模式启动一个容器 docker run -d centos   问题:然后do ...

  6. C# 实现Excel读取接口写入数据

    [Route("adm/getInfo")] [HttpGet] public string GetInfo() { var types = typeof(GCP.Server.W ...

  7. 下载安装Redis+使用

    Window 下安装 第一步:安装 下载地址:https://github.com/MSOpenTech/redis/releases 第二步:解压(盘符) 第三步:打开一个 cmd 窗口 使用 cd ...

  8. HDU 1273 漫步森林(数学 找规律)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1273 漫步森林 Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. XCode: 如何添加自定义代码片段

    转载自:http://rockonmycode.com/tips/xcode-code-snippets#more-185 我们经常会定义一些retain的property,而且大概每次我们都会像这样 ...

  10. Kindeditor图片上传Controller

    asp.net MVC Kindeditor 图片.文件上传所用的Controller [HttpPost, AllowAnonymous] public ActionResult UploadIma ...