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 ...
随机推荐
- ListView Video
com.baidu.frontia.FrontiaApplication ListView Video <item name="android:windowBackground&quo ...
- LVS DR模型
1,环境 VMWare10, CentOS6.3 2,LVS DR网络规划 所有机器都只需要一张网卡,给Director的eth0网卡起个别名eth0:1即VIP的值:给RealServer的lo网卡 ...
- nginx,linux压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 1. wget htt ...
- android120 zhihuibeijing 开机页面
软件启动旋转动画: 布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- select option jquery javascript
jQuery获取Select选择的Text和Value: $('#myselect').find('option:selected').attr('ent_id'); $('#ent_id' ...
- C#_Wpf_DataContex上下文整个类绑定
<Window x:Class="UserStore.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2 ...
- Oracle建表实例
建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子: CREATE TABLE banping ...
- lvm基础
一.简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写. LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬 ...
- Linux与windows文件乱码问题
Linux与windows文件乱码问题 */--> Linux与windows文件乱码问题 Table of Contents 1. 简介 2. iconv详解 2.1. iconv –help ...
- Redis集群
一.Redis集群原理 集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规 ...