什么是作用域

作用域作用:一个变量的可用范围
本质:其实作用域是内存中保存变量的对象
为什么使用作用域:防止不同范围之间的变量互相污染。
全局作用域:专门保存全局变量的区域/存储空间
什么是全局变量:在函数function之外用var创建的变量
特点:随处可用,可反复使用
函数作用域:专门保存仅函数内可用的局部变量的区域/存储空间
什么是局部变量:2种
在函数内用var创建的变量
形参变量
特点:仅函数内部可用,不可重用

i.每个函数在定义时,函数对象上都包含一个"作用域链"
作用域链中第一个格子暂时空
作用域链中第二个格子指向window
ii. 当调用函数时,会临时创建本次函数调用的函数作用域对象
iii. 函数调用过程中: 函数总是优先使用作用域链中离自己近的函数作用域对象中的局部变量。除非离自己近的函数作用域对象中,没有需要的局部变量,才被迫去全局window中查找变量使用!——就近原则!
iv. 函数调用后,自动释放作用域链中离自己近格子中的地址,等效于释放了本次函数调用所使用的函数作用域对象。等效于将本次使用的所有局部变量一起释放了!
——所以,所有局部变量都不可重用!

什么是作用域链: 函数对象中保存函数调用时所有可用的作用域对象的链式结构
作用域链保存着一个函数可用的所有变量(局部变量和全局变量)
作用域链控制着变量的使用顺序(先局部后全局!)

什么是作用域、作用域链相关推荐

  1. 【金三银四】 一文弄懂 js 数据类型、堆栈内存、作用域(链)、闭包知识拓展 (一)

    引言 对答如流系列篇,关于基本数据类型.堆栈内存.作用域作用域链.闭包 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Gi ...

  2. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  3. Javascript 进阶 作用域 作用域链

    一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.Javascript没有代码块作用域的概念,局部作用域是针对函数来说的. [javascript] view plaincopy fu ...

  4. javascript感叹号1_「翻译」JavaScript的可视化学习之三:作用域(链)

    儿子:爸,我有个愿望,当有一天我疲惫回家时,你打电话告诉我,家里有百亿家产等我继承,之前装穷都是为了锻炼我.爸:别着急,爸爸也在等你爷爷的电话呢.- 随时继承百亿家业的Scope(Chain) 周生生 ...

  5. 查找上一级作用域(作用域链)

    查找上一级作用域 当获取变量所对应的值时,首先看变量是否是私有变量:如果不是私有变量,要继续向上一级作用域中查找,如果上一级也没有,那么会继续向上一级作用域查找,直到找到全局作用域为止:如果全局作用域 ...

  6. 【JavaScript】作用域 作用域链

    全局变量 & 局部变量 ES5 中只有词法作用域,没有块级作用域.因此能封闭作用域的只有一个东西 -- 函数 全局变量:就是定义在 function 外的变量,在程序的任意位置都可以访问 局部 ...

  7. JS作用域 , 作用域链

    通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突. JavaScr ...

  8. JavaScript作用域链

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  9. js作用域及作用域链概念理解及使用

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  10. JS----JavaScript中的作用域和作用域链

    作用域(Scope) 1.什么是作用域 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性. 作用域(scope):一个变量的可用范围 作用域的类型 Javascript中有三种作用域: ...

最新文章

  1. android 拖动数字选择,拖放android 3.x导致illegalStateException之后的小数字拖动
  2. linux anaconda环境变量配置
  3. 欢迎使用Java 8之前要重温的10个JDK 7功能
  4. sharepoint timer job 读取config文件内容
  5. Linux新建用户可以在shell中切换到该用户也能登录到图形桌面
  6. Java中的Map、Set、List各种方式遍历
  7. 独家|一文带你理解机器学习中的“归纳偏好”真正含义!
  8. 报纸、电商、PC互联网颠覆传统行业,带来新的生态,自媒体也一样
  9. 从传统企业谈大数据的战略意义
  10. 深圳房价三连跌,国内的房地产价格或将持续下跌,该持现金过冬了
  11. 一小时看懂Ruby代码基本逻辑(自定义metasploit模块)
  12. 好文:读客图书董事长华楠接受采访
  13. 键盘一直自动按/问题的解决。。。
  14. 个人博客的创建之路(自己申请域名、建网站)
  15. [换根] Accumulation Degree
  16. IT十年人生过客-二十八-岗位职责
  17. 电脑能正常上网,但是不能连接共享的打印机 电脑无法打印 服务打开无法打印
  18. ef mysql 事务_EF中使用事务 - 李超明的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. unity DOtweenPath 无法动态加载路径
  20. 0040__node.js中Express简介

热门文章

  1. C++ Reference: Standard C++ Library reference: C Library: cstdio: getc
  2. SpringBoot + Sharding JDBC 读写分离、分库分表
  3. 人工智能、深度学习、机器学习常见面试题71~82
  4. How MonoRail works
  5. 基于Nano Pi NEO4开发板的AS项目开发
  6. 猜数字游戏项目验收总结
  7. 副业案例-晴矢分享 短视频MCN亏损500W的总结的血泪经验
  8. return int()函数 c++解说
  9. 全网清晰虚拟机安装截图
  10. 群晖NAS搭建WebDav服务,并内网穿透实现公网访问