js中变量的意义/宿主环境/内存的概念

责编:menVScode 2017-08-20 0:06 阅读(975)

        一、宿主环境

        js是一门脚本语言,运行js的时候,必须要依赖宿主环境以及js引擎。宿主环境一般会提供一套公共的对象的系统,而这套系统会对js进行开放,允许js的访问。

        比如浏览器会提供宿主环境,但js本身是脚本语言,不会提供输出与输入接口。js它没有与系统和外界沟通通信的能力,它没有办法调用系统的资源。

        不过浏览器的厂商有很多,开发维护我们的宿主的环境,包括每个浏览器提供的js引擎都不一样。而本身的js语言在ECMA标准中,并没有对宿主环境提出明确的定义,也就是说对宿主环境没有统一的标准。同时宿主环境和js引擎,又因为各个浏览器厂商开发不同,所以导致有很大的差异。


        二、宿主环境对象

        window对象它有两层含义,一种是BOM里面的window对象,提供访问浏览器的接口;另一种是ECMA规定的宿主环境对象,全局作用域也是window对象。全局作用域下的变量最终会成为window对象的变量,全局作用域下的函数也会成为window对象的方法。 

        下面的例子很好说明上面的观点

var a = 1;
console.log(a);
console.log(window.a);
console.log(a===window.a);//true

        宿主环境对象,也是window对象。


       三、 内存概念

        对象才可以分配内存

        常量池:存放数字、字符串,值类型的值

        栈:存放变量

        堆:存放对象,这里对象的类型都是object,引用类型的值

QQ截图20170819234925

        疑问:123、"123"这些是对象吗? 栈中的变量也是对象吗?堆中的对象跟平时所说的对象有什么不同。


        四、变量的意义

        js中内存地址(十六进制的方式)的值是获取不到的。

        变量作用,是拿到当前其对应对象的内存地址;

var a = 1;
var c = {};
var d;

        { } 会在堆中开辟空间,同时拥有内存地址(引用地址);定义变量c,会在栈中开辟内存空间,并且存储了其对应的 { } 的内存地址。变量c保存着 { } 的内存地址。

        引用过程:可以理解为对象的内存地址给到了变量c,让c进行存储。而我们试图去访问变量的时候,根据变量里面存储的内存地址,来找到其对应的内存空间。

        变量意义,存储对象的内存地址;对象才可以分配内存,因此变量是特殊的对象。

        变量d没有存储任何内存地址,当去访问d的时候,返回undefined。

QQ截图20170820132324

标签: 变量 内存 js
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码