underscore.js 分析 第一天
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(this)方法,是指当定义完后将this本身通过call()调用本身来实现立即执行。
//在浏览器环境 全局this 就是window对象
(function(){
//执行语句
}).call(this)
underscore.js 分析 第一天的更多相关文章
- underscore.js 分析 第三天
// Create a safe reference to the Underscore object for use below. // 为Underscore对象创建一个安全的引用 // _为一个 ...
- underscore.js 分析6 map函数
作用:通过转换函数(iteratee迭代器)映射列表中的每个值产生价值的新数组.iteratee传递三个参数:value,然后是迭代 index. _.map([1, 2, 3], function( ...
- underscore.js 分析 第四天
查看underscore包含多少属性和方法 通过阅读JavaScript 获取对象的键的数组 var a = _; var arr = Object.keys(a); console.log(arr) ...
- underscore.js 分析 第二天
Underscore源码中有这么句obj.length === +obj.length意思是typeof obj.length == number,即检测obj的长度是否是数字我的理解:这么写是来检测 ...
- underscore.js依赖库函数分析二(查找)
查找: 在underscore.js封装了对dom查找的操作,find()和filter()函数,find()函数的查找操作是返回首个与条件相符的元素值,filter()函数是找到与条件相符的所有元素 ...
- HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改
效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popb ...
- underscore.js依赖库函数分析一(遍历)
Underscore简介: underscore是一个非常简洁,实用的javascript库,和jQuery封装类型差不多,但underscore是backbone的依赖 库,想运行backbone就 ...
- underscore.js 源码分析5 基础函数和each函数的使用
isArrayLike 检测是数组对象还是纯数组 var property = function(key) { return function(obj) { return obj == null ? ...
- Underscore.js 1.3.3 源码分析收藏
Underscore是一个提供许多函数编程功能的库,里面包含了你期待(在Prototype.js和Ruby中)的许多功能.但是没有扩展任何内置的Javascript对象,也就是说它没有扩展任何内置对象 ...
随机推荐
- 显示锁(ReentranLock)
1. Lock接口:定义了一组抽象的加锁操作,提供了一种无条件的.可轮询的.定时的以及可中断的锁获取操作,所有的加锁和解锁的方法都是显示的. 2. ReentrantLock锁:实现了Lock接口,并 ...
- Swift编程语言学习1.1——常量与变量
常量和变量把一个名字(比方maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比方数字10或者字符串"Hello")关联起 ...
- WMIC_2
- webstorm&phpstorm打开大型项目卡死解决如vue-laravel-Yii2
用phpstorm开发时如果项目中文件过多会造成phpstorm变慢甚至卡死,尤其在node加入到我们的项目中更加会加重这种情况,因为node_modules目录中的模块非常多,phpstorm加载这 ...
- 如果将自己的项目共享到github上
1:创建仓库 点击New repository创建仓库.Git上仓库就相当于项目的意思 创建仓库名(repository) 创建成功后得到自己的github地址 2:在eclipse中创建自己的项目 ...
- flume data to hdfs
flume 开发梳理 flume 数据到hadoop conf/hdfsAgent.conf #配置sources.channels.sinks a1.sources=r1 a1.channels=c ...
- apache Rewrite配置(转)
1.Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式.如果要 ...
- 课时46.label标签(掌握)
我们点击QQ注册页面,发现了一个问题,当我们点击密码两个字的时候,输入框聚焦了,而点击确认密码的时候,输入框也聚焦了,而我们上节课做的页面,这么点击,并不聚焦 1.默认情况下文字和输入框是没有关联关系 ...
- iOS 杂笔-26(苹果禁用热更新)
iOS 杂笔-26(苹果禁用热更新) 苹果爸爸禁用热更新小伙伴们有什么想说的吗? 苹果爸爸禁用热更新小伙伴们有什么想说的吗? 苹果爸爸禁用热更新小伙伴们有什么想说的吗?
- ubuntu18.04错误配置变量环境导致无法进入系统
1.问题描述 错误配置环境变量(直接在/etc/profile文件末尾添加了export xxx),关机后一直在登录界面循环无法进入系统. ###环境变量的添加是在原有变量之后以冒号(:)分隔加入,并 ...