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

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

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. learning makefile call func

  2. sed应用

    删除每行空白字符 sed -i 's/^[[:space:]]*//' user.txt 删除空白行 sed -i '/^$/d' user.txt

  3. Python-接口自动化(五)

    python基础知识(五) (六)类与对象 类:某一类具有共同属性和特性的事物或者说是一个抽象的描述,比如说大佬类,你就是大佬类里面具体的一个实例.类一般包含属性和方法 (1)类的语法: class ...

  4. Django content_type 简介及其应用

    在网上看到 django ORM 有一个 content_type 字段表的应用,这张表不是我们通过建立model类添加的,而是django自动帮我们生成的,具体的作用先简单的举个例子给大家介绍一下. ...

  5. webpack 简单配置

    webpack.config.js const path = require('path'); const HtmlWebpackPlugin=require('html-webpack-plugin ...

  6. HFun.快速开发平台(四)=》自定义列表实例(请求参数的处理)

    上编自定义列表描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /******************************* ...

  7. Double H

    ##Double H Team 1.队员 王熙航211606379(队长) 李冠锐211606364 曾磊鑫211606350 戴俊涵211606359 聂寒冰211606324 杨艺勇2116063 ...

  8. c++ 指针、引用和取值;

    直接看代码: #include<iostream> using namespace std; int add(int *a,int *b){ int s; s = *a + *b; cou ...

  9. FPGA设计中的复位

    (1)异步复位与同步复位的写法 1.异步复位与同步复位的区别? 同步复位:若复位信号在时钟有效边沿到来时刻为有效,则执行一次复位操作. 优点: 1)同步复位是离散的,所以非常有利于仿真器的仿真: 2) ...

  10. centos 远程授权

    centos 远程授权命令 ssh-copy-id root@192.168.15.70