call(this)引起的对闭包的重新理解
call(this)引起的对闭包的重新理解.md
变量的作用域
全局变量
局部变量
Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。
函数外部无法读取函数内的局部变量。
函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
(function(){……}).call(this);
(function(){……})();//是闭包的经典用法,内定义的变量,在外肯定是无法访问的
(function(a){c = 1; alert(this.c);})//什么都没有
(function(a){this.c = 1; alert(this.c);})() //alert(“1”);
(function(){c = 1; alert(this.c);}).call(this);//alert(“1”);
(function(a){c = a; alert(this.c);}).call(this,”5”)//alert(“5”);
试了这就没什么用:(哭)
看看下面的例子:
var a = {
b : function(){
this.c = 1;//此时的this指向b
}
}
> a.c //undifined
> a.b(); //此时调用b方法,this指向了a
> a.c //1
> this.c; //undifined 此时this为window
> a.b.call(this) //此时将this指向了window
> this.c //1
> a.c //1
> c //1
(function(){var a = {
b : function(){
this.c = 1;//此时的this指向b
}
}
this.d = 3; alert(this.c);})()
(function(){var a = {
b : function(){
this.c = 1;//此时的this指向b
}
}
this.d = 3; alert(this.c);}).call(this)
http://i.h-won.com/post/2013-08-29/40052244462
https://github.com/klamtlne/Validator
W3School上面解释:call()方法是与经典的对象冒充方法最相似的方法。
function sayColor(sPrefix,sSuffix) {
alert(sPrefix + this.color + sSuffix);
};
var obj = new Object();
obj.color = “blue”;
sayColor.call(obj, “The color is “, “a very nice color indeed.”);
//”The color is blue, a very nice color indeed.
实例2:
function ClassA(sColor) {
this.color = sColor;
this.sayColor = function () {
alert(this.color);
};
}
function ClassB(sColor, sName) {
//this.newMethod = ClassA;
//this.newMethod(color);
//delete this.newMethod;
ClassA.call(this, sColor);
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
var objA = new ClassA(“blue”);
var objB = new ClassB(“red”, “John”);
objA.sayColor();
objB.sayColor();
objB.sayName();
call(this)引起的对闭包的重新理解的更多相关文章
- 对JavaScript闭包和原型理解
最近在学js脚本的一些东西觉得里面有2个知识点比较难理解所以做了如下总结. 1.闭包 简单的理解:一个函数a ,内部有个函数b,那么这个函数b当被作为a函数的返回值得时候被外部的全局变量引用了,那么这 ...
- JavaScript闭包的一些理解
原文:JavaScript闭包的一些理解 简单一点的说:闭包就是能够读取其他函数内部变量的函数.那如何实现读取其它函数内部变量呢,大家都知道在JavaScript中内部函数可以访问其父函数中的变量,那 ...
- javascript 闭包最简单理解
首先说3点与闭包有关系的东西. 一.变量的作用域 变量的作用域不难理解. 1.函数内部可以访问函数外部的变量,而函数外部不能访问函数内部的变量. 2.如果在函数内定义变量的时候,不加var,那么是全局 ...
- js 闭包的简单理解
let a = function(){ var i=0; let b = function(){ i++; alert(i); } return b; } let c = a(); c(); 这段代码 ...
- js闭包之初步理解( JavaScript closure)
闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域, ...
- (原创)JS闭包看代码理解
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- js中的闭包之我理解
闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的 ...
- JS中的闭包的一些理解!
在日常的开发中,基本上是不会遇到关于闭包的这样,但是,因为在一些特殊的情况下,必须采用闭包,所以这里简单的概述下什么是闭包: OK!简而言之,闭包只是一个名词而已,我们更注重于他所实现的功能,也就是我 ...
- 对js闭包的粗浅理解
只能是粗浅的,毕竟js用法太灵活. 首先抛概念:闭包(closure)是函数对象与变量作用域链在某种形式上的关联,是一种对变量的获取机制.这样写鬼能看懂. 所以要大致搞清三个东西:函数对象(funct ...
随机推荐
- android115 自定义控件
布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- Locally Weighted Regression
简单回顾一下线性回归.我们使用了如下变量:\(x\)—输入变量/特征:\(y\)—目标变量:\((x,y)\)—单个训练样本:\(m\)—训练集中的样本数目:\(n\)—特征维度:\((x^{(i)} ...
- iOS-MVVM设计模式
谈到MVVM不得不先说一下MVC,MVC(Model-View-Controller). Model模型:用来呈现数据. View视图:用来呈现用户界面. Controller控制器:用来调节模型与视 ...
- ASP.NET MVC 4 Ajax上传文件
这两天一直纠结着表单的问题.想在一个表单里实现三个功能: 输入查询条件,点击查询: 导出查询数据: 上传文件: 方法有很多,乱花渐欲迷人眼,尝试了很多,无果.大致说的是,给不同按钮写js代码,在js代 ...
- iOS 中使用.9图
背景 .9图来源于Android.为了设计出一套图,兼容Android和iOS,使用.9图的方式来对图片进行拉伸以适应不同的屏幕.在iOS中没有.9图的概念,只能先了解Android的.9图再进行模拟 ...
- 使用SDWebImage 怎么获取指定请求对应的缓存图片呢?
SDWebImage会对我们加载的网络数据进行缓存,但有时候我们想要拿到缓存数据中的图片,可以通过下个方法实现: UIImage *thumbnailImage = [[SDImageCache sh ...
- Linux上安装Squall
Squall是Storm之上的类SQL查询工具,能够将类SQL语句转换成topology,然后提交给Storm运行. 安装Squall前要先安装Java和sbt(simple build tool), ...
- UNIX V6内核源码剖析——进程
进程的概念 1. 什么是进程 2. 进程的并行执行 3. 进程的运行状态 4. 用户模式和内核模式 cpu具有2种模式——内核模式和用户模式,通过PSW来切换. 切换时, 映射到虚拟地址的物理内存区域 ...
- centos 7 下modelsim10.2c安装教程
step1: chmod +x ./install.linux(但是没有任何反应,原因是install.linux是32位程序,系统是64位的,所以要安装相应的库){ yum install glib ...
- 关于post请求参数的大小限制的说明
最近做一个上传图片的项目,前端使用jquery 的post提交,然后把上传的图片的base64码 传到后台,发现几KB或者几十KB的图片,都可以传到后台,但是在上传几M 的图片在后台接收的时候,发现传 ...