保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

Js基础27作用域

  函数和变量的有效范围就是作用域
  1、作用域的概念vara10;functionf1(){console。log(a);}f1();变量a在函数外定义,可以在函数内使用functionf2(){varb20;}console。log(b);变量b在函数内定义,在函数外无法访问,报错:bisnotdefined
  这是因为js中存在作用域的概念。
  作用域:
  作用域就是指定一个变量或者一个函数的作用范围。
  能在页面的任何位置都可以访问,称为全局作用域
  只能在局部(函数内)访问,称为为局部作用域
  在全局作用域下声明的变量,称为全局变量
  在局部作用域下声明的变量,称为局部变量
  上述代码中,a是全局变量,b是局部变量
  ES5中只有函数才有作用域,所谓是局部作用域也可以叫函数作用域。
  作用域的作用就是为了把数据进行保护,不让外部的数据对我们的数据进行污染
  2、函数和变量声明的提升
  在JS中存在一个很重要的特性,函数和变量声明的提升。怎么理解声明提升呢?我们先来看一道面试题:
  以下打印什么?console。log(a);vara123;console。log(a);console。log(f);f();functionf(){console。log(函数声明提升);}
  处的代码如果按照我们以前的理解,代码从上而下执行,那么在执行这行代码的时候,a还没有被声明,所以直接访问一个没有被声明的变量,程序应该报错。
  但是结果却大出所料,这里得到的结果是undefined。
  处的结果也和我们最初的认识是不一样的,结果为f对应的函数对象。
  造成这个结果是因为变量和函数的作用域提升的原因,什么意思呢?
  JS是解释性语言,JS引擎对代码的处理分为两步:预解析处理:在代码执行之前,对代码做全局扫描,对代码中出现的变量和函数提前声明处理;上面代码预解析后会变成这样:
  vara;变量提前声明,但不初始化
  函数提前声明
  functionf(){
  console。log(函数声明提升);
  }
  console。log(a);undefined
  a123;
  console。log(a);123
  console。log(f);函数对象
  f();函数声明提升调用执行:然后自上而下的执行代码
  3、声明提升的规则
  声明提升是将变量或者函数的声明提升到当前作用域的最顶端。在具体使用的过程中存在以下需要注意的细节。变量和变量同名,解析之后只存在一个当前变量的声明。console。log(a);
  vara123;
  console。log(a);
  vara456;
  console。log(a);解析之后:vara;
  console。log(a);undefined
  a123;
  console。log(a);123
  a456;
  console。log(a);456函数和函数同名,后面的声明将前面的覆盖。f();
  functionf(){
  console。log(1);
  }
  f();
  functionf(){
  console。log(2);
  }
  f();
  functionf(){
  console。log(3);
  }解析之后:functionf(){
  console。log(3);
  }
  f();3
  f();3
  f();3函数和变量同名,只有函数声明提升,忽略变量的声明。console。log(a);
  vara123;
  console。log(a);
  functiona(){}
  console。log(a);
  functiona(){}
  console。log(a);解析之后:functiona(){}
  console。log(a);函数a
  vara123;将前面的函数覆盖,a的值变为123
  console。log(a);123
  console。log(a);123
  console。log(a);123如果是命名函数,则只将前面的变量声明提升,函数不动。console。log(fn1);
  functionfn1(){
  }
  console。log(fn1);
  console。log(fn2);
  varfn2function(){
  }
  console。log(fn2);解析之后:functionfn1(){
  }
  varfn2;
  console。log(fn1);fn1函数
  console。log(fn2);undefined
  fn2function(){
  }
  console。log(fn2);fn2函数
  其他问题varabc9;从右往左赋值
  不适用var声明变量不管在哪里都是全局变量
  functionfn(){
  a10;
  }
  4、作用域链和访问规则
  在JavaScript里面,函数内部是可以包含另一个函数的functiona(){functionb(){}}
  此时函数b就被函数a包含越来了,这样就形成了两层作用域。
  如果有以下代码:三个同名变量放在三个作用域内varx10;console。log(x);functiona(){varx20;console。log(x);functionb(){varx30;console。log(x);}b();}a();
  会依次输出:10,20,30
  虽然多个变量x同名,但是不同作用域内优先使用自己内部作用域的变量x。
  如果代码做一下修改:删除函数b的局部变量xvarx10;console。log(x);functiona(){varx20;console。log(x);functionb(){console。log(x);}b();}a();
  依次输出:10,20,20
  函数b内部没有变量b,会向自己的外面的作用域查找x变量,函数a内的x变量离函数b最近,会优先得到函数a的变量x
  代码再做修改:再删除a的局部变量xvarx10;console。log(x);functiona(){函数a内部的变量x也没有了console。log(x);functionb(){函数b内部没有x变量了console。log(x);}b();}a();
  会依次输出:10,10,10
  函数b内部没有x变量,会向函数a的作用域查找,但是函数a内部也没有x变量,会向函数a的上一层作用域再查找,直到查找到了全局作用域。
  代码再次变化:全局的变量x也删除全局的变量x也没有了functiona(){函数a内部的变量x也没有了functionb(){函数b内部没有x变量了console。log(x);}b();}a();
  函数b内部没有变量x,会顺着上层作用域一层一层地查找,直到全局作用域也没有,就会报错。
  总结:只有函数可以制造作用域链结构只要是代码,就至少有一个作用域,即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。将这样的所有的作用域列出来,可以有一个结构:函数内指向函数外的链式结构作用域链。由内而外的访问规律,一直向外找,找不到,报错。

书信写给傅雷的一封信敬爱的傅雷先生:您好!我知道您一定不会看到这封信,但在读完《傅雷家书》后总是想写些什么。在您给爱子一九六零年八月二十九日的信中有句话深深地触碰到了我你是以艺术力生命……欧盟谈判代表就数字服务法案达成一致品玩4月24日讯,欧盟成员国与欧洲议会的谈判代表当地时间23日就欧盟《数字服务法》达成一致。该法案要求互联网平台企业采取更多措施删除非法和有害的在线内容,包括仇恨言论、虚假信息……手机,如何猜中我们的心思?手机,如何猜中我们的心思?毫无疑问,手机作为当下最便捷的通讯工具,极大地满足了人们沟通和娱乐需求,几乎成了人们身体的一部分,可谓是随身携带、机不离手。但是,您注意到……玩洛克王国今天,我唐颖弢(女生10岁)在玩洛克王国,一开始我进入了洛克王国,有一道光照耀在我的身上。唐颖弢第一次睁开眼睛的时候那你一个非常很熟悉的地方:洛克王国。唐颖弢并没有十分激动,而……我有一个愿望作文五篇导语:心愿像一粒种子,种在ldquo;心rdquo;的土壤里;心愿像一艘小船,行驶在ldquo;心rdquo;的海洋上;心愿像一团彩线,编织我们ldquo;心rdquo;的世界……我的校园大家来猜一猜,我们除了在家里,在哪过的时间最长呢?hellip;hellip;答对了,就是在我们学习成长的地方mdash;mdash;学校。进了我们的校园,就看见一条宽宽……狗狗的六年级作文350字今天下午,我放学回家,在快到家的时候,我高兴的跳起来!那是白雪,一条大大的雪撬犬,它是叔叔家的,有可能是叔叔来了!耶!我快速的跑到白雪旁,白雪!白雪看了看我,头左歪歪,右歪歪,……我的暑假精彩生活作文放假了,随着下课铃的一声响,我们的暑假生活就开始了。我们送走了紧张的学期,迎来了欢乐的暑假,从今天开始放假了。老师话音刚落,同学们便欢呼起来:放假了!放假了。老师还说了些……美丽的蔷薇花作文第1篇美丽的蔷薇花作文400字在我们校园的东南角,一个不起眼的角落里,每到夏天到来的时候,那里就开满了美丽的蔷薇花,所以啊那儿就变成了一道独特的风景。远远望去整个墙……小学生六年级我的小伙伴作文朦胧的雨雾中走出一个矫健的身影,那张微笑的脸旁让人感到那么舒心。小编收集了我的小伙伴作文,欢迎阅读。第一篇:我的小伙伴妈妈说,朋友就是我的知心人,任何高兴或难过的事……汤姆索亚历险记读书笔记四篇导读:男孩汤姆是一个爱搞怪爱玩恶作剧的男孩,但是比起同年的孩子他更多了一些勇敢,但同时他的内心又有同年孩子无法匹及的正义感。下面是小编整理的《汤姆索亚历险记》读书笔记,欢迎阅读……声的作文400字天气是那么地好,空气也是那么地好。阳光洒向地面,是那么柔和又温暖。早晨的阳光是极细致的,一栋栋的楼房都显出毛茸茸的粗糙感,在这样的光线里,声音是可以传得很远的。马路……
优秀作文夏天的公园公园里鸟语花香,绿树成荫,小山、小河、喷泉、木桥风景优美,景色怡人。夏天的公园,更是魅力四射了!花儿开得更艳丽了,小草变得更翠绿了,大树长得更粗壮了。走进公园,就能闻到诱……新能源汽车加速发展来源:人民网人民日报3月14日,浙江金华零跑汽车智能工厂一派繁忙。2月交付量同比增长447后,3月排产高达1万辆。目前公司正为中大型纯电轿车零跑C01三季度量产交付……妈妈为我送伞的经历作文零零零零零零一阵清脆响亮的铃声后,一群孩子冲出屋门,放学了。天阴沉沉的,空气中弥漫着新鲜的气息,随着几声怒雷之后,下起了如牛毛般的细雨。糟了!明知今天有雨,忘带伞了呀!我……致高二同学们的一封信亲爱的同学们:回顾这一学期,我们经历了坎坷、获得了成功;我们流下了汗水、收获了喜悦;我们经常反思、积累了经验。在这里让我们一起回顾、真实再现这学期同学们的成长足迹:……对手作文范文450字当然,对手也不一定是指敌人,有的也会指朋友,我就有这么一个朋友。她个子不高不矮,小脸蛋凹入大脑袋里,脸上时刻都保持着灿烂的微笑。她是谁呢?方胡乐天。方胡乐天每次考试……董事长被带走调查?快手回应,已报案!业绩即将出炉,机构一致看有市场传言称,快手董事长宿华疑于四月底被有关部门带走配合调查。5月23日晚间,快手回复券商中国记者称,已正式向公安机关报案并启动法律程序,坚决维护公司和宿华的正当权益。……高三关于第一场雪的作文【第一场雪的作文1】今天是大年初一,一大早,我还在甜甜地睡觉,忽然听到ldquo;噼哩叭啦rdquo;的鞭炮声,响声一阵高过一阵。这时,表弟在外面大叫:ldquo;下雪了……小学生郊游作文600字六篇在日常学习、工作抑或是生活中,大家最不陌生的就是作文了吧,作文可分为小学作文、中学作文、大学作文(论文)。那么一般作文是怎么写的呢?以下是小编为大家收集的小学生郊游作文600字……幸福很简单幸福一直是人们所渴望的,但又有几个人能发自内心的说:ldquo;我很幸福!rdquo;呢?恐怕少之又少。有些人拥有幸福,却不知珍惜;有些人每天在与死神抗战,却能乐观向上,到底幸……机会是留给准备好的人品学网专稿未经允许不得转载人的一生是坎坷不平的,当处在不如意的时候,不要灰心,顽强拼搏,积极备战,因为机会是留给准备好的人。mdash;mdash;题记高考那……Linux上的常用运维命令详解free命令详解解释一下Linux上free命令的输出。下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组F……三年级作文安全伴我行300字【篇一:安全伴我行】生命,使我们的人生变得更加绚烂多彩;生命,使我们的未来变得更加有价值;生命,使我们脚下的路途,变得步步生辉;生命,使我们拥有这幸福而美好的人生!……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网