对于一本编程语言来讲,个人认为,最基本的就是存储,在存储,读取,计算值的时候是按照一定的规则来操作,这套规则呢就叫做作用域。

值保存,读取,的时候需要一个范围,如果以按照函数为单位的话就做函数作用域,按照模块的话就叫做模块作用域。作用域是可以相互嵌套的。

js作为一本编译语言,需要两个过程,一个是编译另一个呢就是运行。而编译大致分为两个部分,1,词法与语法分析(编译)  2,代码生成的过程。

编译时在打开浏览器的一瞬间进行的,js对编译做了优化,举个例子说一下,js编译过程。

var a=123;

首先打开一个页面后,加载了js,创建了一个全局作用域,相当于建立了一个酒店,就是编译的第一个步骤,进入到了词法与语法分析,通过词法与语法分析,可以分辨出哪些时语句哪些是运算符哪些时数据类型,在这个过程中,如果发现了声明语句,也就是var,解释器就会询问当前的作用域,也就是询问这个酒店,是否有这个变量a,如果有会忽略,如果没有,会创建一个变量a,并且分配一定的内存空间,就相当于你接到了一个客人,让这个客人入住到酒店,这个过程就是编译的过程,编译后就会生成一段代码,就是你后面要运行的代码,这也解释了声明语句提前的原因。当声明是一个函数的时候,和前面一样,但同时会新创建一个作用域,相当于你入住酒店,把你安排在哪一层,创建一个新的房间。

思考一个问题,在同一个作用域下,同时声明一个变量和一个函数,而且他俩重名,这个时候解释器如何处理?

答案是:当前作用域下,函数会覆盖变量。

作用域可以嵌套,不可以重叠。

在编译阶段,作用域是对变量函数进行存储,是存储的规则。

在代码生成的过程中(也就是函数运行中)会创建一个东西,这个东西就叫做作用域链,作用域链的作用就是对作用域中的变量和函数进行访问的,是访问的规则。会把作用域连接起来,

函数的局部环境不仅有权访问在全局环境中定义的变量和函数,而且有权访问其包含父环境,乃至全局环境。

全局环境,只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据。

javascript没有,块级作用域,ES6中增加了。

javascript 有自动垃圾回收机制,可以手动清除,就是把变量设为null

js作用域和内存的更多相关文章

  1. js 作用域链&内存回收&变量&闭包

    闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等 一.作用域链:函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在 ...

  2. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  3. 详解js变量、作用域及内存

    详解js变量.作用域及内存 来源:伯乐在线 作者:trigkit4       原文出处: trigkit4    基本类型值有:undefined,NUll,Boolean,Number和Strin ...

  4. JS变量、作用域、内存

    写到这个题目<JS变量.作用域,内存>,我就不由自主想起了黄金三嫖客.可能是名字有点像,嗯,一定是这样子的! JS接触下来,应该是要比Java简单不少的,所以,要学好啊.立个flag半年后 ...

  5. javascript (JS组成、书写位置、基本概念、作用域、内存问题、变量)

    1 JavaScript的组成和书写位置 Javascript:运行在客户端(浏览器)的脚本语言,JavaScript的解释器被称为JavaScript引擎,为浏览器的一部分,与java没有直接的关系 ...

  6. Js的变量、作用域与内存

    变量.作用域与内存 1 .原始值与引用值 Undefined.Null.Boolean.Number. String和Symbol.保存原始值的变量是按值(by value)访问的 引用值是保存在内存 ...

  7. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  8. JS作用域与闭包

    JS作用域与闭包 在JavaScript中,作用域是可访问变量,对象,函数的集合. 变量分为全局变量和局部变量.全局变量在函数外定义,HTML中全局变量是window对象,所有数据对象都属于windo ...

  9. JS作用域面试题总结

    关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...

随机推荐

  1. 跟随我在oracle学习php(13)

    常用的css样式 [class~="col-6"]:选择我所有类名中包含有col-6独立单词的元素 [class*="col-"]:选择所有类名中含有" ...

  2. 解决Eclipse中.properties文件中文乱码问题

    在.properties文件写注释时,发现中文乱码了,由于之前在idea中有见设置.properties文件的编码类型,便找了找乱码原因 在中文操作系统中,Eclipse中的Java类型文件的编码的默 ...

  3. session和cookie的区别是什么,他们都是什么.

    Session是存储在服务器端的,Cookie是存储在客户端的. Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息.如何识别特定的客户呢?cookie就可以做到.每次HTTP请求时, ...

  4. PE格式文件的解析代码

    #include "Global.h" ; //标志,用于表示是否为pe32+文件 ; //标志,用于表示读入的模式,若为0代表是内存读入,不为0,代表是文件打开,此时mode是文 ...

  5. winfrom程序文本框第一次选中问题

    想实现这样的功能: 就是在panel中的文本框,当第一次点击文本框时,全选文本框的内容:再次选择时,可以全选,也可以部分选中, 可是文本框总是从左全部选中,还不能从右边选择,在Enter或Down事件 ...

  6. JAVAEE第三周

    2.背景:看到Session时,感到很熟悉,毕竟涉及到过类似的编程,用得最多的地点就是保存客户端的信息和记录,比如说你已经登陆过某个网站,下次访问时不想要麻烦的重新登陆你就就可以使用这个机制.Sess ...

  7. javeEE第二周

    XML(可扩展标记语言) 1.什么是xml? 扩展标记语言 XML(Extensible Markup Language) 的规范定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义 ...

  8. 在servlet中跳转问题

    跳转有重定向和转发 1重定向 2转发

  9. uboot使用笔记

    一.从最基础的uboot开始 首先是打算直接用程序把已有的镜像烧写进去sd卡里面,但是问题来了,烧写不进去 原因: 可能是windows 7的某些版本和win⑩的系统为了保护磁盘,设定了保护等级,直接 ...

  10. 【SoftwareTesting】Lab 2

    一.    在火狐浏览器上安装selenium插件 点击“开发者”的选项,然后点击“获取更多工具”,输入seleniumIDE进行搜索,找到后进行安装即可.安装完成后火狐浏览器的右上角会多出一个小的带 ...