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)引起的对闭包的重新理解的更多相关文章

  1. 对JavaScript闭包和原型理解

    最近在学js脚本的一些东西觉得里面有2个知识点比较难理解所以做了如下总结. 1.闭包 简单的理解:一个函数a ,内部有个函数b,那么这个函数b当被作为a函数的返回值得时候被外部的全局变量引用了,那么这 ...

  2. JavaScript闭包的一些理解

    原文:JavaScript闭包的一些理解 简单一点的说:闭包就是能够读取其他函数内部变量的函数.那如何实现读取其它函数内部变量呢,大家都知道在JavaScript中内部函数可以访问其父函数中的变量,那 ...

  3. javascript 闭包最简单理解

    首先说3点与闭包有关系的东西. 一.变量的作用域 变量的作用域不难理解. 1.函数内部可以访问函数外部的变量,而函数外部不能访问函数内部的变量. 2.如果在函数内定义变量的时候,不加var,那么是全局 ...

  4. js 闭包的简单理解

    let a = function(){ var i=0; let b = function(){ i++; alert(i); } return b; } let c = a(); c(); 这段代码 ...

  5. js闭包之初步理解( JavaScript closure)

    闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域, ...

  6. (原创)JS闭包看代码理解

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  7. js中的闭包之我理解

    闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的 ...

  8. JS中的闭包的一些理解!

    在日常的开发中,基本上是不会遇到关于闭包的这样,但是,因为在一些特殊的情况下,必须采用闭包,所以这里简单的概述下什么是闭包: OK!简而言之,闭包只是一个名词而已,我们更注重于他所实现的功能,也就是我 ...

  9. 对js闭包的粗浅理解

    只能是粗浅的,毕竟js用法太灵活. 首先抛概念:闭包(closure)是函数对象与变量作用域链在某种形式上的关联,是一种对变量的获取机制.这样写鬼能看懂. 所以要大致搞清三个东西:函数对象(funct ...

随机推荐

  1. [Effective C++ --025]考虑写出一个不抛异常的swap函数

    引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...

  2. com.domain.bean

    package com.domain.bean; import java.util.LinkedHashMap; import java.util.Map; public class TmpBean ...

  3. 需要一个分页,花了一个钟写了一个,刚学js,不是很完美

    <script src="js/jquery.min.js" ></script> <script type="text/javascrip ...

  4. Android_Intent_startActivityForResult

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  5. StringBuilder 用法和div获取

    StringBuilder strHtml = new StringBuilder(); strHtml.Append("<tr>"); strHtml.Append( ...

  6. 关于Eclipse中的一些基本知识

    Eclipse中寻找JRE的顺序是:vm参数指定的JRE--->elipse目录下的JRE--->操作系统中默认的JRE,利用这个特性也可以用vm参数来解决当本机安装有多个JRE的情况. ...

  7. JMS简介

    任何一个系统从整体上来看,其实质就是由无数个小的服务或事件(我们可以称之为事务单元)有机地组合起来的.对于系统中任何一个比较复杂的功能,都是通过调用各个独立的事务单元以实现统一的协调运作而实现的.现在 ...

  8. 求关注 wcf bindipendpointdelegate 端口限制的功能

    我最近也需要实现一个功能:1)一个客户端(192.168.0.15),10个服务端(提供A接口.B接口)如下:      192.168.0.1-5685       192.168.0.2-5685 ...

  9. otf字体转ttf字体

    可以使用Font creator进行转换字体. 绿色版下载链接 Font Creator(字体编辑软件下载)V9.0官方版 或者我的百度云:http://pan.baidu.com/s/1c1jjfm ...

  10. 【C语言】4-指针

    直接引用 1. 回想一下,之前我们是如何更改某个变量的值? 我们之前是通过变量名来直接引用变量,然后进行赋值: char a; a = 10;   2. 看上去是很简单,其实程序内部是怎么操作的呢? ...