JS和C# 里的闭包及闭包在事件中的使用
在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# 里的闭包及闭包在事件中的使用的更多相关文章
- js学习笔记之作用域链和闭包
在学习闭包之前我们很有必要先了解什么是作用域链 一.作用域链 作用域链是保证对执行环境有权访问的所有变量和函数的有序访问. 这句话其实还是蛮抽象的,但是通过下面一个例子,我们就能清楚的了解到作用域链了 ...
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- [JavaScript闭包]Javascript闭包的判别,作用和示例
闭包是JavaScript最重要的特性之一,也是全栈/前端/JS面试的考点. 那闭包究竟该如何理解呢? 如果不爱看文字,喜欢看视频.那本文配套讲解视频已发送到B站上供大家参考学习. 如果觉得有所收获, ...
- 全面理解Javascript闭包和闭包的几种写法及用途
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途. 一.什么 ...
- Swift的闭包(一):闭包简介、闭包表达式的优化
定义:Closures are self-contained blocks of functionality that can be passed around and used in your co ...
- 转 全面理解Javascript闭包和闭包的几种写法及用途
转自:http://www.cnblogs.com/yunfeifei/p/4019504.html 好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说ja ...
- 全面理解Javascript闭包和闭包的几种写法及用途【转】
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- js模仿jquery里的几个方法parent, parentUntil, children
有时工作需要, 也是接着上一章的方法, 用js模仿jquery里的几个方法parent, parentUntil, children. function parent(node){ return no ...
- c#调用js,以及js调用C#里的函数, c#自己生成js代码,实现对web的控制
using mshtml;using System;using System.Collections.Generic;using System.Linq;using System.Security.P ...
随机推荐
- python基础 实战作业 ---Excel基本读写与数据处理
代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...
- .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇
.NET 环境中使用RabbitMQ 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...
- 算法基础:整数拆分问题(Golang实现)
一个整数总能够拆分为2的幂的和.比如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共同拥有6种不同的 ...
- vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂
上一篇咱们做好了准备工作.数据库设计和Entity层,如今介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其有用起来非常easy.你就觉得他就是决 ...
- Android 四大组件学习之BroadcastReceiver二
上节学习了怎样创建一个广播.也尝试接受系统打电话的广播. 本节课学习怎样自己定义广播.自己定义广播实质上也就是创建一个发送广播者,创建一个接受该广播者. 那我们就開始行动吧. 先创建一个发送广播的应用 ...
- JQuery实现ajax跨域
AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请求数据,就会出现错误.如果能控制数据驻留的远程服务器 ...
- SpringCloud系列十:使用Feign实现声明式REST调用
1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User fin ...
- 创建Mat
#include<opencv2/opencv.hpp> #include<iostream> #include<cassert> #include<vect ...
- PHP获取QQ群成员QQ号码
.加入某个群 .进入群空间http://qun.qzone.qq.com/group#!/25998059/member 备注:25998059为群号码 .进入群成员列表 .使用浏览,在某个群成员头像 ...
- java继承机制
1 继承 关键字:extends java没有多重继承 实例 父类: package unit4; public class Base { public int publicVarofBase= ...