Javascript中的“作用域链”知识分享

名词解释活动对象:一次函
【菜科解读】
很多人都可能知道上例的执行结果,但是不是所有人都明白为什么会是这样的结果,包括我自己。
名词解释
活动对象:一次函数调用开始的时候,javascript解释器会收集函数体中的所有局部变量(以var形式声明的变量),将这些局部变量存储到一个称为“活动对象”的对象里,所有变量都初始为undefined。
代码示例
1 var fun = function(){2 alert(name);3 var name = '段光伟';4 }当执行这个函数时候时(fun()),函数体还没执行到,当前的活动对象为[{ name: undefined }],因此fun()执行的结果为:
函数的[scope]属性:每个函数在定义的时候(生成函数实例的时候)都会分配一个[scope]属性,这个属性指向的当前的“作用域链”。
这个属性开发人员是访问不到的,只有javascript能访问。
作用域链:当函数调用时,javascript引擎会维护一个这次调用的作用域链,这个作用域链条是函数的[scope]指向的作用域链加上函数调用时的活动对象,形式如[ 活动对象, 函数定义时的作用域链条]。
代码示例
1 var a = 1; 2 //步骤1:[ { a: 1, outer: undefined } ] 4 var outer = function(){ 5 //步骤3:[ { b: undefined, inner: undefined } ,{ a: 1, outer: function } ] 6 var b = 2; 7 var inner = function(){ 8 //步骤4:[ {}, { b: 2, inner: function } ,{ a: 1, outer: function } ] 9 return a + b;12 //步骤3:[ { b: 2, inner: function } ,{ a: 1, outer: function } ]13 return inner();16 //步骤2:[ { a: 1, outer: function } ]17 outer();作用域链规则
规则1
javascript一般运行在一定的宿主中,每个宿主都会提供一个“全局对象”,或者叫“全局活动对象”,这个全局对象是所有作用域链的根节点。
规则2
“取值操作”(如:alert(xxxVar))的规则是,沿着作用域链依次查找名称为“xxxVar”的变量,返回第一个找到的值,如果找不到就抛出异常(ReferenceError: xxxVar is not defined)。
规则3
“赋值操作”(如:xxxVar = '段光伟')的规则是,沿着作用域链依次查找名称为“xxxVar”的变量,覆盖第一个找到的值,如果找不到就将“xxxVar”添加到全局对象中。
备注
“闭包”这个概念就是通过“作用域链”实现的,而C#是通过编译器实现的,.NET并不支持。
Javascript,中的,“,作用域链,”,知识,分享,代历史上的荒唐帝王,封一块石头为“侯爷”
其中,因为痴迷石头而亡国的皇帝,就只有了。
赵佶生于元丰五年(公元1082年),宋神宗第十一子、宋哲宗的弟弟,宋朝第八位皇帝。
赵佶自幼养尊处优,逐渐养成了轻佻浪荡的性格。
他自幼爱好广泛,笔墨、丹青、骑马、射箭、蹴鞠无一不精,尤其对奇花异石、飞禽走兽有着超乎寻常的痴迷。
元符三年(公元1100年)正月,年仅25岁的宋哲宗病死了,向(宋神宗的皇后)以自己无子,神宗诸子皆庶子等理由,极力主张立哲宗次弟端王赵佶为帝。
宰相等人反对,认为赵佶"轻佻不可以君天下", 但向太后在、等大臣的支持下,还是立了赵佶为帝,是为宋徽宗。
当了皇帝的赵佶,本应以国事为重,任用贤能,抵御外敌。
可是他的心思根本不在治国理政,而是在书画等艺术上,尤其痴迷于奇珍异石,每天的事情基本上就是玩,玩的。
一些品行不端、阿谀奉承的大臣便,地在全国收集石头珍品献给皇上,而且还在全国各地兴起搜集石头的运动。
有的大臣还委派地方官吏搜集石头,然后打包,将一船又一船的奇珍异石送到京城汴梁。
由于运送石头的船只太重,而且是逆水而上,官员们不得不雇佣大量的民工。
如此扰民伤财,宋徽宗竟然丝毫没有悔意。
在众多搜集石头,以讨好宋徽宗的奸臣中,有一个叫朱勔(音:mian,之一)的最卖力。
一次,朱勔的下属在南方发现了一块巨大的太湖石。
因为个头太大了,朱勔便让人即刻赶工,建造了2艘新的大船。
由于石头太高,一路上他们还拆了很多座矮桥,花费了好几个月,花了大把的银子,终于把这块石头运到汴梁城(今河南开封),安放在宋徽宗专门摆放奇珍异石的源自里。
宋徽宗看到漂亮的石头后,非常高兴,下令重赏运送石头的民工,同时对朱勔升官进爵。
更加荒唐的是,宋徽宗竟然封这块石头为“盘固侯”。
要知道,“侯爵”可是地位非常高的爵位,一般都是为国家做过大贡献,立下赫赫战功的人,才能被封为“侯爵”。
而宋徽宗竟然为一块劳民伤财的破石头加封侯爵,实在是荒谬至极! 大臣们看到宋徽宗对石头,而且还加封进贡石头的官员,便纷纷效仿。
一些官员放下手头工作,前往南方各地寻找石头。
不管是国家的还是私人院子里的,只要被这些奸臣看中了,他们就弄个封条,将石头绕一圈,然后宣布:这块石头是皇帝的,谁敢抗命,违者重罚。
有的人家新建好的房子,因为有一块好石头,这些爪牙就把人家的房子拆掉,只为拿出那块石头。
至于补偿,想都别想,弄得百姓。
根据记载,宋徽宗在位的25年里,总共从全国各地搜刮的各类奇石达10万块以上。
其中有一块石头的运费,竟然花掉30万贯钱,相当于花掉了一万户中等收入人家的全年开销。
而长的宰相蔡京,在位期间曾经派人在各地搜集奇花异石运往汴梁城。
徽宗见状大喜,另在汴梁城东北“艮”卦的方位,修建了名为“艮岳”的宫苑存放这些奇石,以便自赏。
宋徽宗如此荒唐,必然要付出惨重代价。
公元1127年,金兵攻入汴梁城,掳走了宋徽宗、这对父子皇帝,以及王公大臣、家属等3000多人,这也标志着曾经富裕的北宋王朝就此灭亡。
宋徽宗被俘虏后,被关在寒冷的东北,受尽了金人的侮辱和折磨。
他曾多次反思自己的过错,前后自杀过好几次,都被金人救了下来。
公元1135年,一代荒唐皇帝宋徽宗病死了。
他死后,金人仍旧没有放过他。
史书记载,金人把宋徽宗的遗体焚烧后,制成灯油,真是惨不忍睹! 随机文章杨玉环替老胖安禄山「洗三」 唐玄宗却不皱眉、不动怒请问宋代的兵制分为哪几类?英科学家推测人的极限寿命是3000岁,重启端粒酶就能延缓衰老美国总统提出的肥皂水效应,用赞扬的方式批评别人(效果更佳)外星人帮助中国抗日,外星人暗中帮忙中国打赢日本(纯属扯淡)
为什么开国帝王中有的叫“太祖”,有的叫“高祖”呢?这两者有什么分别
对于这些开国皇帝来说,在庙号上却分为太祖和高祖两种称呼。
比如开国皇帝李渊,其庙号就是高祖,也即唐高祖。
而就北宋开国皇帝,则被称之为,也即其庙号是太祖。
在北宋之后,开国皇帝,其庙号也是太祖,也即。
那么,问题来了,同样是开国皇帝,为什么有的叫“太祖”,有的叫“高祖”呢?换而言之,对于开国皇帝来说,庙号为“高祖”和“太祖”的区别是什么呢? 一 首先,庙号早在商朝就已设立,对国家有大功、值得子孙永世祭祀的先王,就会特别追上庙号,以视永远立庙祭祀之意。
当时庙号只有四种:创基立业曰“太”(太祖汤、太宗)、功高者曰“高”(高祖、高宗)、世代祭祀曰“世”(世祖盘庚、世宗且甲)、中兴者曰“中”(中宗且乙),另外按照“祖有功而宗有德”的标准,给予祖或宗的称号。
以前,并不是所有君王都有庙号。
比如在西汉的10多位皇帝中,只有、、、。
不过,在隋朝之后,古代中的皇帝,基本上都有了庙号。
二 一般来说,对于古代封建王朝中的皇帝,只有开国皇帝的庙号才能称“祖”,而之后的皇帝在庙号上,只能称为“宗”,比如唐太子李世民、、等。
而就开国皇帝的庙号来说,又分为高祖和太祖。
一方面,就高祖来说,比如隋高祖、唐高祖李渊这些开国皇帝,之所以庙号为高祖,是因为他们将太祖的庙号用来追封自己的祖先了。
比如李渊建立唐朝后,就追封自己的祖先李虎为。
李虎(498-551),字文彬,陇西成纪(今甘肃秦安县)人。
时期大臣。
三 根据史料记载,武德元年(618年),李虎孙子李渊称帝,建立唐朝后,追谥为景皇帝,庙号太祖,葬于永康陵。
进一步来说,对于唐高祖李渊来说,之所以用太祖的庙号来追封自己的祖先李虎,是因为自己能够建立唐朝,离不开李虎建立的基业。
另一方面,就太祖来说,有宋太祖赵匡胤、明太祖朱元璋等皇帝。
就朱元璋来说,是平民出身,也即朱元璋能够建立明朝,不是依赖于祖先建立的基业,而是自己白手起家才建立的明朝。
在此基础上,朱元璋自然没有必要追封自己的祖先为太祖,也即朱元璋自己就可以使用太祖这一庙号。
四 最后,在中国古代历史上的开国皇帝中,刘邦是比较特殊的存在。
对于刘邦来说,后人一般将其称之为汉高祖。
但是,刘邦实际上的庙号却是太祖,而不是“高祖”。
对于刘邦来说,之所以能建立西汉王朝,主要也是靠自己的多年的拼搏。
不过,因为刘邦的是“高皇帝”,所以,刘邦才被后人称之为汉高祖,但是,在庙号上,刘邦应该被称之为汉太祖。
总的来说,对于中国古代历史上的开国皇帝,如果庙号为太祖的话,意味着江山主要是自己打下来。
但是,如果开国皇帝庙号为高祖的话,那么就意味着其能够建立王朝,离不开祖先奠定的基业,所以其将太祖的庙号用来追封自己的祖先了。
随机文章1934年8月8日营口坠龙事件,龙摧毁日资厂房掀翻火车新型核动力巡航导弹,能突破世界上任何导弹防御系统世界上最后一条美人鱼,距今1万多年历史(美人鱼真实存在过)新疆发现世界最大油田,10亿吨储量震惊世界/恐改变格局核裂变和核聚变的区别,一个分裂释放能量/一个合成释放能量