本文主要给大家分享了关于javascript作用域面试题的相关内容,分享出来供大家参考学习,下面来一起看看吧。
一、作用域:
在了解作用域之前,首先需要明白一些基础概念:
每一个变量、函数都有其作用的范围,超出作用不得使用,这个叫做作用域。
二、全局变量、局部变量:
1.全局变量:
(1)在全局范围内声明的变量,如var a=1;
(2)只有赋值没有声明的值,如a=2;
(注:如果a=2在函数环境中,也是全局变量)
2.局部变量:
写入函数中的变量,叫做局部变量。
3.作用:
(1)程序的安全。
(2)内存的释放。
三、作用域链:
查找量的过程。先找自己局部环境有没有声明或者是函数,如果有,则查看声明有无赋值或者是函数的内容,如果没有,则向上一级查找。
四、预解析顺序:
每个程序都要做的工作,程序开始先预解析语法,标点符号是否有误,解析内存是否可容纳,解析变量……直到解析无误了,才开始按正常的流程顺序走。试想一下,如果没有预解析顺序,直接按流程顺序走,可能程序执行到最后一个函数,发现了语法错误,才开始报错,那性能要有多差啊!
顺序内容:
1.文件内引用的<script>块依次解析,从上到下连成一片。
2.每个script块内部的var(注意:只解析变量名,不解析值,如var a=2;
将var a解析在环境的开头,并不解析后面的值,只有当程序执行到var a=2
这行时,才会给变量赋值),function解析到本块的开头。
3.依次解析每个环境,将var
,function
解析到环境的开头。
五、应用场景(一些常见的作用域相关的面试题):
var a="aa"; function test(){ alert(a);//undefined,函数执行后,在函数环境内,var a会预解析,当弹出a时,首先先找本层环境内有无声明,发现有。但是代码没有执行到赋值,所以结果是undefined。 var a="bb";//var a会预解析在函数开头,执行到这行才进行赋值 alert(a);//“bb” } test(); alert(a);//"aa" 找全局环境下的声明,找到了var a="aa"
var a="aa"; function test(){ alert(a);//“aa”,函数执行后,在函数环境内,没有找到本层环境关于a的声明,所以开始向上一层环境查找。 a="bb";//执行到这行开始改变全局a的量 } test(); alert(a);//"bb" 全局环境的a在函数执行时已经被改变
function test(){ b();//函数b会被预解析,因此可以调用,执行了输出1; var a=1; function b(){ console.log(1); console.log(a);//undefined var a=2; } } test();
六、总结:
要搞清楚一个变量的作用域,重点是搞清楚预解析顺序,然后再判断作用域的范围,这些都是有套路可言:先找本层环境有无声明,有的话,看是否进行了赋值;只有声明没有执行赋值,就是undefined。没有声明也没有赋值的话,就再向上一层查找,直到找到为止。如果所有的执行环境都没有找到,那么控制台就会报错变量找不到。
函数的话就更简单了:找本层环境是否有预解析的函数,有的话即可执行。没有的话还是向上查找。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 老头杯第二届规则是什么 英雄联盟老头杯第二届规则介绍
- 王崴-爵士听堂.蓝色波萨(HQCD)[WAV+CUE]
- 群星《欧美动听情歌·柔情第5季》2CD【DTS-WAV分轨】
- [极品珍藏]德意志进行曲集卡拉扬SACD[WAV+CUE]
- 前暴雪制作人呼吁反击DEI 玩家:夺回文化!
- 腾讯证实子公司Sharkmob大规模裁员:整个市场很低迷
- 荣耀加冕 问鼎冠军 中国代表队获第四届东亚电竞锦标赛团体总冠军
- 污甩乐队.2024-Let.the.dirt.left【摩登天空】【FLAC分轨】
- 杜德伟.1994-ALL.FOR.YOU(英)【滚石】【WAV+CUE】
- 群星.2013-百代好声音ADMSCD1【EMI百代】【WAV+CUE】
- 群星《私人音乐精选示范碟》PRIVATEMUSIC 发烧唱片名碟[WAV+CUE][1.1G]
- 山口百惠《あなたへの子守唄》日本索尼钢刻字首版[WAV分轨][1.1G]
- 群星《宝丽金20周年特别发烧版》1:1母盘直刻限量编号[低速原抓WAV+CUE][1G]
- 凤飞飞.1984-仲夏(夏艳)[WAV]
- 常安《民歌红·江南燕》DTS-ES6.1[WAV]