在Javascript世界里,无所不用闭包及自定义事件, 自定义事件其实也是事先定义好一种规则

,当触发者被响应后执行的一段回调。下面看个例子

function dothing(callBack){
callBack();
}
dothing(function(){
alert(1)
});

上面例子先执行dothing,然后执行里面的闭包(回调)过程,把function(){  alert(1)}做为

参数传递过callBack,后callBack,就callBack(),其它就是执行子被传递的代码 这里用到了匿名函数,在JS中有时候也会用户这样(function(){alert(1)})(),这样后匿名函数

会立马执行,再来说下自定义事件 步骤: 1)创建事件 var event = document.createEvent(type);

type: 可以是DOM Level 2中的 HTMLEvents 也可以是 DOM Level 3中的 MouseEvent 可参考

2) 初始化事件 event.initEvent(type, bubbles, cancelable);

type: 自定义事件的名称 bubbles: 是否冒泡 cancelable: 是否可取消

3) 侦听事件 target.addEventListener(type, listener, useCapture);

type:初始化时注册的事件名称 listener:一般为事件触发的所要执行的function useCapture指出事件在冒泡还是捕获阶段执行 可参考

4) 派发事件 bool = element.dispatchEvent(event);

手动派发此事件,即可触发3中的listener 函数

一个完整的例子:

var evt = document.createEvent('Event');
evt.initEvent('build', true, true);
elem.dispatchEvent(evt);
document.addEventListener('build', function(e){
}, false);

在C#的世界里也完全可以像上面那样,思想是一样的,只是实现的过程不一样罢了

private void  dothing(Action<bool> Hand)
{ //dothing here }
private void go()
{ dothing((e)=>{ //闭包如返回在这里进行操作
});
}

在 事件中的使用

1)先定义事件      public event Action Finished;//注意这里用的是Action类型,简化开发      然后在调用的地方      Finished();      最后执行事件的主体

完整代码

 class Program
{
static void Main(string[] args)
{
t my = new t();
my.Finished += my_Finished;
//当条件成熟时,t类里触发do方法
//这样就会执行到Finished事件了 } static void my_Finished()
{
Console.WriteLine("这事件被调用了");
}
}
class t
{
public event Action Finished;
void Do()
{
Finished();
}
public t()
{
if (DateTime.Now.Year == )
{
Do();
}
}
}

JS和C# 里的闭包及闭包在事件中的使用的更多相关文章

  1. js学习笔记之作用域链和闭包

    在学习闭包之前我们很有必要先了解什么是作用域链 一.作用域链 作用域链是保证对执行环境有权访问的所有变量和函数的有序访问. 这句话其实还是蛮抽象的,但是通过下面一个例子,我们就能清楚的了解到作用域链了 ...

  2. 深入理解JavaScript的闭包特性如何给循环中的对象添加事件

    初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...

  3. [JavaScript闭包]Javascript闭包的判别,作用和示例

    闭包是JavaScript最重要的特性之一,也是全栈/前端/JS面试的考点. 那闭包究竟该如何理解呢? 如果不爱看文字,喜欢看视频.那本文配套讲解视频已发送到B站上供大家参考学习. 如果觉得有所收获, ...

  4. 全面理解Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

  5. Swift的闭包(一):闭包简介、闭包表达式的优化

    定义:Closures are self-contained blocks of functionality that can be passed around and used in your co ...

  6. 转 全面理解Javascript闭包和闭包的几种写法及用途

    转自:http://www.cnblogs.com/yunfeifei/p/4019504.html 好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说ja ...

  7. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  8. js模仿jquery里的几个方法parent, parentUntil, children

    有时工作需要, 也是接着上一章的方法, 用js模仿jquery里的几个方法parent, parentUntil, children. function parent(node){ return no ...

  9. c#调用js,以及js调用C#里的函数, c#自己生成js代码,实现对web的控制

    using mshtml;using System;using System.Collections.Generic;using System.Linq;using System.Security.P ...

随机推荐

  1. 【Python 数据分析】pandas模块

    上一节,我们已经安装了numpy,基于numpy,我们继续来看下pandas pandas用于做数据分析与数据挖掘 pandas安装 使用命令 pip install pandas 出现上图表示安装成 ...

  2. 页面找不到js方法的原因,关于EasyUI

    有时EasyUI中datagride写法不正确,会导致无法加载页面上其他的js方法.datagride中的逗号是一个也不能多.一定要注意: 例如以下代码中标红的逗号就会导致后边的js不能正常加载. c ...

  3. Android代码实现控件闪烁效果

    代码地址如下:http://www.demodashi.com/demo/13162.html 前言 在项目开发过程中,我们有时会遇到需要控件闪烁和停止的问题,这个用xml是可以实现的,但是为了在使用 ...

  4. applicationContext.xml 文件头报错Referenced file contains errors

    问题如下:原先运行正常的项目,突然在applicationContext.xml 文件头报错 内容:Referenced file contains errors (http://www.spring ...

  5. 《DirectX 9.0 3D游戏开发编程基础》必备的数学知识 读书笔记

    最近在看游戏导航源码,但是看了几天感觉看不懂.里面全是一些几何运算,以及一些关于3d方面的知识.发现自己缺少3d这方面的知识,正好也想研究一下3d游戏开发的基本原理,于是决定买本书看看了,后来在ope ...

  6. sql 多线程

    1.codeproject上面一个多线程执行sql的库. 开发中常常要执行一些耗时的数据操作,比如update.insert.bulk insert.index creation, 若顺序执行,则操作 ...

  7. ExtjS学习--------Ext.define定义类

    Ext类Class的配置项:(注:Extjs的 的中文版帮助文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 ExtJS配置文件和演 ...

  8. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡(转)

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  9. MVC之ActionFilterAttribute自定义属性

    ActionFilterAttribute里有OnActionExecuting方法,跟Controller一样, 同是抽象实现了IActionFilter接口. // 登录认证特性 public c ...

  10. 用lua nginx module搭建一个二维码

    用lua nginx module搭建一个二维码(qr code)生成器 作者 vinoca 發布於 2014年10月31日 如果有VPS,或者开源的路由器,安装一个nginx,添加lua-nginx ...