# 名词

# 面包屑导航

很久很久以前,在大森林的边上住着一个贫穷的樵夫,他与妻子和两个孩子相依为命。他的儿子名叫汉赛尔,女儿名叫格莱特。后来樵夫的妻子去世了,他又给孩子们取了一个后母。后母计划把两个孩子带到森林的深处,然后趁他们睡着的时候跑掉。汉赛尔无意中知道了后母的计划,于是偷偷地把一块面包藏在了口袋里。在去森林的路上,汉赛尔悄悄地捏碎了他的面包,并不时地停下脚步,把碎面包屑撒在路上。后母顺利地趁孩子们睡着的时候溜掉了,汉赛尔和格莱特醒来时已是一片漆黑。汉赛尔安慰他的妹妹说:“等太阳一出来,我们就看得见我撒在地上的面包屑了,它一定会指给我们回家的路。”

在童话里,面包屑是汉赛尔在进入森林的路上偷偷撒下的,这是一种"历史记录"的应用方式,目的是帮助你追溯来路,因为它应该是一种线性的导航方式。 不过在网页的应用中,"追溯来路"这件事浏览器已经做的足够好了,所以“面包屑”慢慢地就变成用来表达内容归属关系的界面元素。

结局

但是当太阳升起来时,他们在地上却怎么也找不到一点面包屑了,原来它们都被那些在树林里、田野上飞来飞去的鸟儿一点点地啄食了。

# 银弹

在西方古老的传说里,有一种叫做“狼人”的可怕生物。这种生物平时和人类没有什么不同之处,但每到月圆之夜,他们就会变成狼身。当他们变成狼以后,兽性会不能控制,开始袭击普通的人类。狼人给人类带来了巨大的恐惧,因为他们是无法被一般的手段杀死的,只能用赐福过的银弹(Silver Bullet)才能杀死狼人。“银弹”因此成为了“任何能够带来极大效果的直接解决方案”的代名词。

# XSS

Cross-site scripting(XSS) is a type of computer security vulnerability typically found in web applications. XSS enables attackers to inject client-side scripts into web pages viewed by other users. A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same-origin policy. Cross-site scripting carried out on websites accounted for roughly 84% of all security vulnerabilities documented by Symantec as of 2007. Their effect may range from a petty nuisance to a significant security risk, depending on the sensitivity of the data handled by the vulnerable site and the nature of and security mitigation implemented by the site's owner.

# CORS

CORS : Cross origin resource sharing CORS全称Cross-Origin Resource Sharing,是 HTML5 规范定义的如何跨域访问资源。 “Cross-origin resource sharing (CORS) is a mechanism that allows a web page to make XMLHttpRequests to another domain. Such "cross-domain" requests would otherwise be forbidden by web browsers, per the same origin security policy. CORS defines a way in which the browser and the server can interact to determine whether or not to allow the cross-origin request. It is more powerful than only allowing same-origin requests, but it is more secure than simply allowing all such cross-origin requests.” ----Wikipedia

在使用 CORS 跨域的方法中,如果程序员偷懒将 Access-Control-Allow-Origin 设置为:Access-Control-Allow-Origin:* 允许任何来自任意域的跨域请求,那么就存在被 DDos 攻击的可能。

# 语法糖

语法糖这个词最早在 Peter J.Landin 的论文中提出的,有意思的是,这个词跟闭包来自同一篇文章(The mechan ical evaluation of expressions,1964)。 世界上第一个语法糖就是这里的 where 了:


 


xy(x+y)
where x =+ a√y
and y =+

这个写法等价于

{λ(x,y).xy(x+y))}
[+ a√y,+]

那么从这个用法和现在社区的用法来看,语法糖有这么2个特征:

1、运行时等价 语法糖的英文是 syntactic sugar ,这个 syctactic 学过编译原理的都知道什么意思,显然它是个语法级别的描述,那么它最为明显的特征,就是不涉及运行时变更。 比如 coffee 的 ->,它跟 function 完全运行时等价(废话,他就是编译到 function 的啊),所以是语法糖,而 es6 的 => 因为涉及 this 等特殊处理,所以不能算语法糖。

2、语法结构等价 因为原本作者用法比较简单,估计也没想太多,但是其实语法糖还有一点约束,那就是糖前糖后的语法结构在语法中所处的位置不能变,比如原来是嵌套结构,后来变成顺序结构了,这个就不能说是语法糖看,因为它影响了周围的语法环境约束,比如

where(1) {
  yield i ++
}

这个肯定不等价

return new lterator(......)

因为 returnwhile 在语法上不等价,它能出现的位置不一样,这就叫语法改进,而不叫语法糖。

# 语法盐

# 糖衣炮弹

# 鸭子类型

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试(见下面的“历史”章节),“鸭子测试”可以这样表述: “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”[1][2] 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。 鸭子类型通常得益于"不"测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性。

解读:鸭子类型 这种可能在弱类型中比较常见。在强类型语言中应该不存在。

我们定义一个函数,传入鸭子对象,并调用它的 走 方法。 如果我们传入一个 鸟 对象,如果它有 走 这个方法,那么,我们这个函数依然可以正常运行,如果 鸟 对象,没有 走 方法,那么将引发一个运行时错误。