【人身保险论文】请专业大神求解图中第一题是赔4万元持续医疗费用还是5万元死亡保险金 非常感谢

说明: 这个属于个人的一些理解,有错误的地方,还希望给予教育哈~
此处以caffe官方提供的AlexNet为例.
2.框架介绍
3.步骤详细说明
5.参考文献
AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet.
其官方提供的数据模型,准确率达到57.1%,top 1-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。
AlexNet的结构模型如下:
如上图所示,上图采用是两台GPU服务器,所有会看到两个流程图,我们这里以一台CPU服务器为例做描述.该模型一共分为八层,5个卷基层,,以及3个全连接层,在每一个卷积层中包含了激励函数RELU以及局部响应归一化(LRN)处理,然后在经过降采样(pool处理),下面我们来逐一的对每一层进行分析下吧.
3. 详细介绍:
1. 对于conv1层,如下
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
lr_mult: 1
decay_mult: 1
lr_mult: 2
decay_mult: 0
convolution_param {
num_output: 96
kernel_size: 11
   1.输入Input的图像规格: 224*224*3(RGB图像),实际上会经过预处理变为227*227*3
& & & & 2.使用的96个大小规格为11*11的过滤器filter,或者称为卷积核,进行特征提取,(ps:图上之所以看起来是48个是由于采用了2个GPU服务器处理,每一个服务器上承担了48个).
需要特别提一下的是,原始图片为RBG图像,也就是三个通道的,我们这96个过滤器也是三通道的,也就是我们使用的实际大小规格为11*11*3,也就是原始图像是彩色的,我们提取到的特征也是彩色的,在卷积的时候,我们会依据这个公式来提取特征图: 【img_size - filter_size】/stride +1 = new_feture_size,所以这里我们得到的特征图大小为:
([227-11] / 4 + 1 )= 55 注意【】表示向下取整.&我们得到的新的特征图规格为55*55,注意这里提取到的特征图是彩色的.这样得到了96个55*55大小的特征图了,并且是RGB通道的.
& & &需要特别说明的一点是,我们在使用过滤器filter和数据进行卷积时(ps: 卷积就是[1,2,3]*[1,1,1] = 1*1+2*1+3*1=6,也就是对应相乘并求和),而且我们使用的卷积核尺寸是11*11,也就是采用的是局部链接,每次连接11*11大小区域,然后得到一个新的特征,再次基础上再卷积,再得到新的特征,也就是将传统上采用的全链接的浅层次神经网络,通过加深神经网路层次也就是增加隐藏层,然后下一个隐藏层中的某一个神经元是由上一个网络层中的多个神经元乘以权重加上偏置之后得到的,也就是所偶为的权值共享,通过这来逐步扩大局部视野,(形状像金字塔),最后达到全链接的效果. 这样做的好处是节约内存,一般而言,节约空间的同时,消耗时间就会相应的增加,但是近几年的计算机计算速度的提升,如GPU.已经很好的解决了这个时间的限制的问题.
& & & & &3. 使用RELU激励函数,来确保特征图的值范围在合理范围之内,比如{0,1},{0,255}
&最后还有一个LRN处理,但是由于我一直都是没用这玩意,所以,哈哈哈哈哈哈,没有深切的体会,就没有发言权.
& & & & &4. 降采样处理(pool层也称为池化),如下图:
                        
name: "pool1"
type: "Pooling"
bottom: "norm1"
top: "pool1"
pooling_param {
kernel_size: 3
&& & & &5. 使用LRN,中文翻译为局部区域归一化,对降采样的特征图数据进行如果,其中LRN又存在两种模式:
& & & & & & &5.1 源码默认的是ACROSS_CHANNELS ,跨通道归一化(这里我称之为弱化),local_size:5(默认值),表示局部弱化在相邻五个特征图间中求和并且每一个值除去这个和.
官方给的是内核是3*3大小,该过程就是3*3区域的数据进行处理(求均值,最大/小值,就是区域求均值,区域求最大值,区域求最小值),通过降采样处理,我们可以得到
( [55-3] / 2 + 1 ) = 27 ,也就是得到96个27*27的特征图,然后再以这些特征图,为输入数据,进行第二次卷积.
conv2层,如下图:
对应的caffe:
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
lr_mult: 1
decay_mult: 1
lr_mult: 2
decay_mult: 0
convolution_param {
num_output: 256
kernel_size: 5
& &conv2和conv1不同,conv2中使用256个5*5大小的过滤器filter对96*27*27个特征图,进行进一步提取特征,但是处理的方式和conv1不同,过滤器是对96个特征图中的某几个特征图中相应的区域乘以相应的权重,然后加上偏置之后所得到区域进行卷积,比如过滤器中的一个点X11 ,如X11*new_X11,需要和96个特征图中的1,2,7特征图中的X11,new_X11 =1_X_11*1_W_11+2_X_11*2_W_11+7_X_11*7_W_11+Bias,经过这样卷积之后,然后在在加上宽度高度两边都填充2像素,会的到一个新的256个特征图.特征图的大小为:
(【27+2*2 - 5】/1 +1) = 27 ,也就是会有256个27*27大小的特征图.
& 然后进行ReLU操作.
再进行降采样【pool】处理,如下图,得到
name: "pool2"
type: "Pooling"
bottom: "norm2"
top: "pool2"
pooling_param {
kernel_size: 3
得到: 【27-3】/2 +1 = 13 &也就是得到256个13*13大小的特征图.
conv3层,如下图:
name: "conv3"
type: "Convolution"
bottom: "pool2"
top: "conv3"
lr_mult: 1
decay_mult: 1
lr_mult: 2
decay_mult: 0
convolution_param {
num_output: 384
kernel_size: 3
得到【13+2*1 -3】/1 +1 = 13 ,&384个13*13的新特征图.
conv3没有使用降采样层.
name: "conv4"
type: "Convolution"
bottom: "conv3"
top: "conv4"
lr_mult: 1
decay_mult: 1
lr_mult: 2
decay_mult: 0
convolution_param {
num_output: 384
kernel_size: 3
得到【13+2*1 -3】/1 +1 = 13 ,&384个13*13的新特征图.
conv4没有使用降采样层.
conv5层,如下图:
name: "conv5"
type: "Convolution"
bottom: "conv4"
top: "conv5"
lr_mult: 1
decay_mult: 1
lr_mult: 2
decay_mult: 0
convolution_param {
num_output: 256
kernel_size: 3
得到256个13*13个特征图.
降采样层pool,防止过拟合:
name: "pool5"
type: "Pooling"
bottom: "conv5"
top: "pool5"
pooling_param {
kernel_size: 3
得到: 256个 (【13 - 3】/2 +1)=6 &6*6大小的特征图.
fc6全链接图:
描述一下: 这里使用4096个神经元,对256个大小为6*6特征图,进行一个全链接,也就是将6*6大小的特征图,进行卷积变为一个特征点,然后对于4096个神经元中的一个点,是由256个特征图中某些个特征图卷积之后得到的特征点乘以相应的权重之后,再加上一个偏置得到.  
name: "drop6"
type: "Dropout"
bottom: "fc6"
top: "fc6"
dropout_param {
dropout_ratio: 0.5
再进行一个dropout随机从4096个节点中丢掉一些节点信息(也就是值清0),然后就得到新的4096个神经元.
fc7全连接层:
&和fc6类似.
fc8链接层:
采用的是1000个神经元,然后对fc7中4096个神经元进行全链接,然后会通过高斯过滤器,得到1000个float型的值,也就是我们所看到的预测的可能性,
如果是训练模型的话,会通过标签label进行对比误差,然后求解出残差,再通过链式求导法则,将残差通过求解偏导数逐步向上传递,并将权重进行推倒更改,类似与BP网络思虑,然后会逐层逐层的调整权重以及偏置.
5.参考文献:
&ImageNet https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
&BP神经网络&https://www.zhihu.com/question/
&还有一些当时学习的时候看过,不过时隔久远,已经忘了地址了.
阅读(...) 评论()您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第二章人身保险的数理基础课件.ppt 308页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
人 身 保 险 第二章人身保险的数理基础 2.1寿险精算概论 2.2利息理论 2.3生命表和生命函数 2.4生存年金 2.5人寿保险保费的确定 2.6健康和人身意外伤害保险保费的确定 2.1寿险精算概论 2.1.1寿险精算的概念 2.1.2寿险精算的起源 2.1.3寿险精算的内容 2.1.4寿险精算的意义 2.1.5寿险精算的基础 2.1.1寿险精算的概念 保险精算的概念 保险精算就是运用数学、统计学、金融学、保险学及人口学等学科的知识和原理,对保险业经营管理中的各个环节进行数量分析,为保险业提高管理水平、制定策略和做出决策提供科学依据和工具的一门学科 保险精算:寿险精算和非寿险精算 一个案例 问题 问题一:该保单应该如何定价 ? 问题二:在资产负债表上,如何确定该保单相应的负债? 问题三:被保险人如果退保,该返还其多少? 问题四:如果该产品是分红保单,如何确定红利的分配原则? 问题五: 如何对该保单的利润进行敏感性分析? 问题六:保费收入如何投资以及如何进行资产负债管理? 问题七:怎样才能确保该公司的偿付能力? 问题八: 如何确定该公司的价值?
寿险精算的概念 概念:是在对人身保险事故出险率及出险率的变动规律加以研究的基础上,考虑资金投资回报率及其变动,根据保险种类.保险金额.保险期限.保险金给付方式.保险费缴纳方式及保险人对经营费用等的估计等,对投保人需缴纳的保险费水平.保险人有不同时期必须准备的责任准备金以及人身保险的其他方面等进行的科学精确的计算.
1693年,英国天文学家、数学家爱德华.哈雷根据德国布雷斯劳市居民的死亡资料,编制了世界上第一个完整的死亡表,有科学的方法精确地计算出各年龄段人口的死亡率。 18世纪,托马斯.辛普森根据哈雷的死亡表构造了依据死亡率变化而变化的保险费率表。后来,詹姆斯多德森又根据年龄的差异确定了更为精确的保险费率表。 1724年,法国数学家亚伯拉罕.德.莫伊维提出了死亡法则。
寿险精算的内容 人身保险按投保人数的不同,可分为 一元生命人身保险 复合生命人身保险 2.1.5寿险精算的基础 随机事件与概率 大数定律及其在保险中的应用 寿险精算的基础 随机事件与概率 随机试验符合符合以下特征的事件:1.可以在相同的条件下重复地进行;2.每次试验的可能结果不止一个,并且能事先明确实验的可能结果;3.进行一次试验之前不能确定哪一个结果会出现. 概率:表示随机事件的可能性的大小,概率在就表示某种事件出现的可能性就大.0≤P(A) ≤ 1 寿险精算的基础 大数定律及其在保险中的应用 大数定律应用于保险时得出的最有意义的结论是:当保险标的的数量足够大时,通过以往统计数据计算出的估计损失概
什么是精算学和精算师 ? 精算学是指综合运用数学、统计学和金融理论研究经济市场,特别是其中涉及保险、养老金计划中的随机现象的一门学科 ; 精算师就是指那些运用精算学知识分析研究经济风险的专职从业人员。
精算师的工作范围除了保险公司外,还遍及咨询机构、政府机构、大型企业的员工福利计划部门、医院、银行和投资公司等所有需要研究经济风险的部门。
保险精算的发展和现状
精算职业范围的发展 精算职业团体的发展 精算学作为一门学科的发展
专门职业和精算师 它的基本目的是为公众及公众利益提供服务; 它为成员个人提供支持,并提高成员集体的社会地位; 它是一个学习性的社团,鼓励研究,促进成员之间的交流; 它的成员具有专业技能; 对那些在专业技能考试中达到必需标准的成员,它经常以签名证书的形式给予资格证明; 它通过提供后续职业教育,帮助并要求成员保持职业技能; 它建立了成员所必须遵循的行为规范和实践标准; 它拥有惩戒程序以保证成员遵守行为规范和维护职业标准。
精算职业的目标 正确和实用的理论; 高尚的道德标准和服务客户、雇主或其他公共利益的意愿; 精算师在为公共利益提供服务中的角色,比如保险公司的指定精算师; 组织形成具有凝聚力的自我管理团体; 愿意为解决公众和社会服务的争论作出贡献; 保持资质标准,提高职业声誉。 保险精算的发展和现状
从传统产品到非传统产品 从寿险到非寿险、养老金、财务和投资 从保险公司到咨询机构、政府部门 从各个国家独立的精算制度到国际统一的精算标准
精算在我国的发展
精算职业团体在我国的发展 精算教育在我国的发展 精算师资格考试
如何才能成为合格的精算师
第一种以欧洲大部分国家和拉美国家为代表,一般只要在大学取得相应的学位后,在实务领域有一定工作经验后即可由精算职业组织认可其为精算师;
第二种以北美和英联邦国家为代表,主要凭参加精算职业组织举行的职业资格考试来认可精算师资格。
我们国家的精算考试体系属于上述第二种精算师资格认可体系,也就是说,考生必须通过专门的精算职业资格考试才能
正在加载中,请稍后...jQuery的deferred对象详解 - 阮一峰的网络日志
jQuery的deferred对象详解
的开发速度很快,几乎每半年一个大版本,每两个月一个小版本。
每个版本都会引入一些新功能。今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----。
这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax。为了实现它,jQuery的全部ajax代码都被改写了。但是,它比较抽象,初学者很难掌握,网上的教程也不多。所以,我把自己的学习笔记整理出来了,希望对大家有用。
本文不是初级教程,针对的读者是那些已经具备jQuery使用经验的开发者。如果你想了解jQuery的基本用法,请阅读我编写的和。
======================================
jQuery的deferred对象详解
作者:阮一峰
一、什么是deferred对象?
开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。
通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。
但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了。
简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。
它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。它的主要功能,可以归结为四点。下面我们通过示例代码,一步步来学习。
二、ajax操作的链式写法
首先,回顾一下jQuery的ajax操作的传统写法:
  $.ajax({
    url: "test.html",
    success: function(){
      alert("哈哈,成功了!");
    },
    error:function(){
      alert("出错啦!");
在上面的代码中,$.ajax()接受一个对象参数,这个对象包含两个方法:success方法指定操作成功后的回调函数,error方法指定操作失败后的回调函数。
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。
现在,新的写法是这样的:
  $.ajax("test.html")
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
可以看到,相当于success方法,相当于error方法。采用链式写法以后,代码的可读性大大提高。
三、指定同一操作的多个回调函数
deferred对象的一大好处,就是它允许你自由添加多个回调函数。
还是以上面的代码为例,如果ajax操作成功后,除了原来的回调函数,我还想再运行一个回调函数,怎么办?
很简单,直接把它加在后面就行了。
  $.ajax("test.html")
  .done(function(){ alert("哈哈,成功了!");} )
  .fail(function(){ alert("出错啦!"); } )
  .done(function(){ alert("第二个回调函数!");} );
回调函数可以添加任意多个,它们按照添加顺序执行。
四、为多个操作指定回调函数
deferred对象的另一大好处,就是它允许你为多个事件指定一个回调函数,这是传统写法做不到的。
请看下面的代码,它用到了一个新的方法:
  $.when($.ajax("test1.html"), $.ajax("test2.html"))
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
这段代码的意思是,先执行两个操作$.ajax("test1.html")和$.ajax("test2.html"),如果都成功了,就运行done()指定的回调函数;如果有一个失败或都失败了,就执行fail()指定的回调函数。
五、普通操作的回调函数接口(上)
deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。也就是说,任何一个操作----不管是ajax操作还是本地操作,也不管是异步操作还是同步操作----都可以使用deferred对象的各种方法,指定回调函数。
我们来看一个具体的例子。假定有一个很耗时的操作wait:
  var wait = function(){
    var tasks = function(){
      alert("执行完毕!");
    };
    setTimeout(tasks,5000);
我们为它指定回调函数,应该怎么做呢?
很自然的,你会想到,可以使用$.when():
  $.when(wait())
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
但是,这样写的话,done()方法会立即执行,起不到回调函数的作用。原因在于$.when()的参数只能是deferred对象,所以必须对wait()进行改写:
  var dtd = $.Deferred(); // 新建一个deferred对象
  var wait = function(dtd){
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变deferred对象的执行状态
    };
    setTimeout(tasks,5000);
现在,wait()函数返回的是deferred对象,这就可以加上链式操作了。
  $.when(wait(dtd))
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
wait()函数运行完,就会自动运行done()方法指定的回调函数。
六、deferred.resolve()方法和deferred.reject()方法
如果仔细看,你会发现在上面的wait()函数中,还有一个地方我没讲解。那就是的作用是什么?
要说清楚这个问题,就要引入一个新概念"执行状态"。jQuery规定,deferred对象有三种执行状态----未完成,已完成和已失败。如果执行状态是"已完成"(resolved),deferred对象立刻调用done()方法指定的回调函数;如果执行状态是"已失败",调用fail()方法指定的回调函数;如果执行状态是"未完成",则继续等待,或者调用方法指定的回调函数(jQuery1.7版本添加)。
前面部分的ajax操作时,deferred对象会根据返回结果,自动改变自身的执行状态;但是,在wait()函数中,这个执行状态必须由程序员手动指定。dtd.resolve()的意思是,将dtd对象的执行状态从"未完成"改为"已完成",从而触发done()方法。
类似的,还存在一个方法,作用是将dtd对象的执行状态从"未完成"改为"已失败",从而触发fail()方法。
  var dtd = $.Deferred(); // 新建一个Deferred对象
  var wait = function(dtd){
    var tasks = function(){
      alert("执行完毕!");
      dtd.reject(); // 改变Deferred对象的执行状态
    };
    setTimeout(tasks,5000);
  $.when(wait(dtd))
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
七、deferred.promise()方法
上面这种写法,还是有问题。那就是dtd是一个全局对象,所以它的执行状态可以从外部改变。
请看下面的代码:
  var dtd = $.Deferred(); // 新建一个Deferred对象
  var wait = function(dtd){
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变Deferred对象的执行状态
    };
    setTimeout(tasks,5000);
  $.when(wait(dtd))
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
  dtd.resolve();
我在代码的尾部加了一行dtd.resolve(),这就改变了dtd对象的执行状态,因此导致done()方法立刻执行,跳出"哈哈,成功了!"的提示框,等5秒之后再跳出"执行完毕!"的提示框。
为了避免这种情况,jQuery提供了方法。它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。
请看下面的代码:
  var dtd = $.Deferred(); // 新建一个Deferred对象
  var wait = function(dtd){
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变Deferred对象的执行状态
    };
    setTimeout(tasks,5000);
    return dtd.promise(); // 返回promise对象
  var d = wait(dtd); // 新建一个d对象,改为对这个对象进行操作
  $.when(d)
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
  d.resolve(); // 此时,这个语句是无效的
在上面的这段代码中,wait()函数返回的是promise对象。然后,我们把回调函数绑定在这个对象上面,而不是原来的deferred对象上面。这样的好处是,无法改变这个对象的执行状态,要想改变执行状态,只能操作原来的deferred对象。
不过,更好的写法是所指出的,将dtd对象变成wait()函数的内部对象。
  var wait = function(dtd){
    var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变Deferred对象的执行状态
    };
    setTimeout(tasks,5000);
    return dtd.promise(); // 返回promise对象
  $.when(wait())
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
八、普通操作的回调函数接口(中)
另一种防止执行状态被外部改变的方法,是使用deferred对象的建构函数$.Deferred()。
这时,wait函数还是保持不变,我们直接把它传入$.Deferred():
  $.Deferred(wait)
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
jQuery规定,$.Deferred()可以接受一个函数名(注意,是函数名)作为参数,$.Deferred()所生成的deferred对象将作为这个函数的默认参数。
九、普通操作的回调函数接口(下)
除了上面两种方法以外,我们还可以直接在wait对象上部署deferred接口。
  var dtd = $.Deferred(); // 生成Deferred对象
  var wait = function(dtd){
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变Deferred对象的执行状态
    };
    setTimeout(tasks,5000);
  dtd.promise(wait);
  wait.done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });
  wait(dtd);
这里的关键是dtd.promise(wait)这一行,它的作用就是在wait对象上部署Deferred接口。正是因为有了这一行,后面才能直接在wait上面调用done()和fail()。
十、小结:deferred对象的方法
前面已经讲到了deferred对象的多种方法,下面做一个总结:
生成一个deferred对象。
指定操作成功时的回调函数
指定操作失败时的回调函数
没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。
  (6) 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。
为多个操作指定回调函数。
除了这些方法以外,deferred对象还有二个重要方法,上面的教程中没有涉及到。
有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。
  $.when($.ajax( "/main.php" ))
  .then(successFunc, failureFunc );
如果then()有两个参数,那么第一个参数是done()方法的回调函数,第二个参数是fail()方法的回调方法。如果then()只有一个参数,那么等同于done()。
这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
  $.ajax( "test.html" )
  .always( function() { alert("已执行!");} );
(致谢:本文第一稿发表后,来信指出原文对promise()的理解是错的。现在的第二稿是根据修改的,在此我表示衷心感谢。)
一、问题的由来
学懂 JavaScript 语言,一个标志就是理解下面两种写法,可能有不一样的结果。
JavaScript 程序越来越复杂,调试工具的重要性日益凸显。客户端脚本有浏览器,Node 脚本怎么调试呢?

我要回帖

更多关于 人身保险伤残评定标准 的文章

 

随机推荐