问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript中的作用域

发布网友 发布时间:2024-09-17 06:47

我来回答

1个回答

热心网友 时间:2024-09-28 20:41

前言

大家好呀,我是L同学。今天我们来学习javascript中的作用域。

作用域

作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为局部作用域和全局作用域。

局部作用域

局部作用域又可以分为函数作用域和块作用域。

函数作用域:在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。需要注意的是:(1)函数内部声明的变量,在函数外部无法被访问。(2)函数的参数也是函数内部的局部变量。(3)不同函数内部声明的变量无法互相访问。(4)函数执行完毕后,函数内部的变量实际被清空了。

<script>//声明counter函数functioncounter(x,y){//函数内部声明的变量lets=x+y;console.log(s);//18}//设用counter函数counter(10,8);//访问变量sconsole.log(s);//报错</script>

块作用域:在JavaScript中使用{}包裹的代码称为代码块,代码块内部声明的变量外部将【有可能】无法被访问。

<script>{//age只能在该代码块中被访问letage=18;console.log(age);//正常}//超出了age的作用域console.log(age);//报错letflag=true;if(flag){//str只能在该代码块中被访问letstr='helloworld!';console.log(str);//正常}//超出了age的作用域console.log(str);//报错for(lett=1;t<=6;t++){//t只能在该代码块中被访问console.log(t);//正常}//超出了t的作用域console.log(t);//报错</script>

JavaScript中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。let声明的变量会产生块作用域,但是var不会产生块作用域。const声明的常量也会产生块作用域。不同代码块之间的变量无法互相访问,我们更推荐使用let或const。需要注意的是,开发中let和const经常不加区分的使用,如果担心某个值会不小被修改时,则只能使用const声明成常量。

全局作用域

<script>标签和.js文件的【最外层】就是所谓的全局作用域,在此声明的变量在函数内部也可以被访问。

<script>//此处是全局functionsayHi(){//此处为局部}//此处为全局</script>

全局作用域中声明的变量,任何其它作用域都可以被访问,如下代码所示。我们为window对象动态添加的属性默认也是全局的,不推荐使用。函数中未使用任何关键字声明的变量为全局变量,也不推荐使用。所以我们要尽可能少的声明全局变量,防止全局变量被污染。

JavaScript中的作用域是程序被执行时的底层机制,了解这一机制有助于规范代码书写习惯,避免因作用域导致的语法错误。

<script>//全局变量nameletname='小明';//函数作用域中访问全局functionsayHi(){//此处为局部console.log('你好'+name);}//全局变量flag和xletflag=true;letx=10;//块作用域中访问全局if(flag){lety=5;console.log(x+y);//x是全局的}</script>作用域链

在解释什么是作用域链前我们先来看一段代码。函数内部允许创建新的函数,f函数内部创建的新函数g,会产生新的函数作用域,由此可知作用域产生了嵌套的关系。

<script>//全局作用域leta=1;letb=2;//局部作用域functionf(){letc;//局部作用域functiong(){letd='yo';}}</script>

作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域。嵌套关系的作用域串联起来形成了作用域链,相同作用域链中按着从小到大的规则查找变量。子作用域能够访问父作用域,父级作用域无法访问子级作用,就近原则。

原文:https://juejin.cn/post/7101697105047224328

热心网友 时间:2024-09-28 20:36

前言

大家好呀,我是L同学。今天我们来学习javascript中的作用域。

作用域

作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为局部作用域和全局作用域。

局部作用域

局部作用域又可以分为函数作用域和块作用域。

函数作用域:在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。需要注意的是:(1)函数内部声明的变量,在函数外部无法被访问。(2)函数的参数也是函数内部的局部变量。(3)不同函数内部声明的变量无法互相访问。(4)函数执行完毕后,函数内部的变量实际被清空了。

<script>//声明counter函数functioncounter(x,y){//函数内部声明的变量lets=x+y;console.log(s);//18}//设用counter函数counter(10,8);//访问变量sconsole.log(s);//报错</script>

块作用域:在JavaScript中使用{}包裹的代码称为代码块,代码块内部声明的变量外部将【有可能】无法被访问。

<script>{//age只能在该代码块中被访问letage=18;console.log(age);//正常}//超出了age的作用域console.log(age);//报错letflag=true;if(flag){//str只能在该代码块中被访问letstr='helloworld!';console.log(str);//正常}//超出了age的作用域console.log(str);//报错for(lett=1;t<=6;t++){//t只能在该代码块中被访问console.log(t);//正常}//超出了t的作用域console.log(t);//报错</script>

JavaScript中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。let声明的变量会产生块作用域,但是var不会产生块作用域。const声明的常量也会产生块作用域。不同代码块之间的变量无法互相访问,我们更推荐使用let或const。需要注意的是,开发中let和const经常不加区分的使用,如果担心某个值会不小被修改时,则只能使用const声明成常量。

全局作用域

<script>标签和.js文件的【最外层】就是所谓的全局作用域,在此声明的变量在函数内部也可以被访问。

<script>//此处是全局functionsayHi(){//此处为局部}//此处为全局</script>

全局作用域中声明的变量,任何其它作用域都可以被访问,如下代码所示。我们为window对象动态添加的属性默认也是全局的,不推荐使用。函数中未使用任何关键字声明的变量为全局变量,也不推荐使用。所以我们要尽可能少的声明全局变量,防止全局变量被污染。

JavaScript中的作用域是程序被执行时的底层机制,了解这一机制有助于规范代码书写习惯,避免因作用域导致的语法错误。

<script>//全局变量nameletname='小明';//函数作用域中访问全局functionsayHi(){//此处为局部console.log('你好'+name);}//全局变量flag和xletflag=true;letx=10;//块作用域中访问全局if(flag){lety=5;console.log(x+y);//x是全局的}</script>作用域链

在解释什么是作用域链前我们先来看一段代码。函数内部允许创建新的函数,f函数内部创建的新函数g,会产生新的函数作用域,由此可知作用域产生了嵌套的关系。

<script>//全局作用域leta=1;letb=2;//局部作用域functionf(){letc;//局部作用域functiong(){letd='yo';}}</script>

作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域。嵌套关系的作用域串联起来形成了作用域链,相同作用域链中按着从小到大的规则查找变量。子作用域能够访问父作用域,父级作用域无法访问子级作用,就近原则。

原文:https://juejin.cn/post/7101697105047224328
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑显示器优泒,AOC,飞利浦哪个显示色彩较好 想买超薄的显示器,优派好还是飞利浦好? 优派和飞利浦哪一个更好用 我和我女友热恋两个月了,但是她总是嫌弃我。而且她专插本考上了本科... ...岁我喜欢一个女孩但不知道改制面和他说谁能帮帮我啊求求大家了 我... 我该怎么追她 谁能帮帮我 ...有能理解我的话的么,谁能帮我分析下我和他的现状, 头大,头发少,头顶尖适合发型? 大脸头发少的适合什么发型 头大脸圆,头发比较少柔软,剪什么发型会好看 绿色蔬菜汁有哪些 有没有不用安装外机的空调 河源有哪些地道的西北民间菜馆? 借贷记卡是什么卡 ...和贷两字,下面也有显示是银行卡现金取款是什么意思, 甲亢可以吃鱿鱼吗 甲亢患者能吃海鲜吗? 人体内的细胞一生能分裂多少次 可乐浇花对花有哪些注意事项? 可乐可以拿来浇花吗? 男人屏蔽女的,女的微信他,男的拒绝,然后女的删除男的,男人请求添加,女... 为什么屏蔽临时会话会有个正在发送请求,对方会知道�� 把别人删了QQ好友,取消屏蔽为什么还显示发送请求,我取消屏蔽对方知道吗... 白鹿镇旅游攻略图片大全白鹿镇旅游攻略 彭州阳平玄观好玩吗,彭州30公里周边旅游景点 白鹿小镇旅游攻略住宿推荐,传奇小镇景区门票 微信群发可以发200人一次吗? 简单有深度的小故事 很有深度的句子范例 用情太投入的句子 春考商贸填报志愿 你不知道的javascript(上) JavaScript引入块级作用域的原因是什么? 浅析Js中const,let,var的区别及作用域 小爱同学智能音响多少钱一台 印花丝巾的搭配方案有哪些? 怎么知道新买的移动手机号码是新号段 bell复古头盔耳机安装方法 平安保险有地区限制吗 平安保险️区域限制没有? 手机怎么把腾讯视频移到百度云 我18岁中专毕业,家里人介绍在网吧上班,可是没有前途啊,不想干了... 特级通知是什么意思? 泰安市山口锅炉辅机厂公司简介 锅炉辅机有哪些? 黑龙江北方除渣机制造有限公司简介 卫校毕业生自我鉴定模板 在家长群里,如何礼貌地发通知? 怪物猎人物语2破灭之翼摸蛋及怪物培养心得介绍_怪物猎人物语2破灭之翼... 鼻窦炎能不能太累?能不能跑步?能不能参加中考的跑步?鼻窦炎手术在哪做... 从爱到恨的绝望伤感说说