在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. 访问vector元素方法的效率比较(转)

    LInux下: gcc 4.47,red hat6 #include<iostream> #include<vector> #include<time.h> usi ...

  2. 【Python】help与dir的用法

    当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参数时, 它返回当前模块中定义的名字的列表. 如果您需要快速获取任何的Python函数或语句的信息,那么您可以使用 ...

  3. lucene 索引中文档的属性建立与不建立带来的影响总结

    索引中文档的属性建立与不建立带来的影响总结   1.依据文档的某属性去查找索引的话,只会返回带有此属性(如果你对当前属性设定了条件,那么需要满足当前条件)的所有文档,没有建立此属性的文档是不会在返回结 ...

  4. android应用多线程守护让你非常难杀死它

    1.android 应用开启后启动一个服务 public class TestserviceActivity extends Activity { /** Called when the activi ...

  5. 2B01-View-Switcher

    Gallery和swithcer联合使用 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the ...

  6. Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结

    Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结 Atitit.java load class methods 1. 动态加载jar文件和class文件. 1 ...

  7. Closure闭包示例

    var foo = function(){ var cnt = 0; return function(){ return cnt++; }; }; var closure = foo(); conso ...

  8. AutoLayout详解+手把手实战(转载)

    首先说一下这篇博客虽然是标记为原创,但是事实并非本人亲自写出来的,知识点和例子本人花了一天各处查 找和整理最终决定写一个汇总的详解,解去各位朋友到处盲目查找的必要,因为不是转载某一个人的内容,故此不标 ...

  9. Javascript模块规范

    因为有了模块,就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是有一个前提,就是大家必须以同样的方式编写模块. 目前,通行的Javascript模块规范共有两种:CommonJS和AMD ...

  10. 如何在GitHub上删除某个文件夹?

    步骤: (以删除.idea文件夹为例) git rm -r --cached .idea #--cached不会把本地的.idea删除 git commit -m 'delete .idea dir' ...