面向对象--理解面向对象须知;

第一个问题:什么是作用域???

第二个问题:作用域在什么情况下会形成???

第三个问题:什么是变量提升及作用域链???

第四个问题:“=”的 理解???

第五个问题:object和json的区别???

第六个问题:object对象的定义???

首先我们要知道作用域是什么?作用域也是我们常说的栈内存,栈内存又是什么呢?js代码执行的环境就是栈内存;

当然,还有一个堆内存,堆内存的作用是什么?存放代码块的空间,当函数代码执行或引用数据使用时,他们的代码块

就存放在堆内存中,函数以字符串的形式存放;引用数据类型用键值对的形式存放。

第二个问题:什么情况下会形成作用域???第一,浏览器天生就有一个作用域,全局作用域(window);第二:函数执行的

的时候会形成一个私有的作用域。

第三个问题:什么是变量提升及作用域链???变量提升也就是预解释,什么意思呢?就是在JS代码在执行之前,浏览器会

给他一个全局作用域(window),在window下分为了两个模块,一个是内存模块,一个是执行模块,内存模块会找到所有带

var和function的关键字提前进行变量声明,然后就会给每个变量分配一个内存地址,在执行模块开始执行时,如果遇到自己

作用域下的变量就会通过内存地址去查找变量的存在,如果有就直接操作,没有就向他的上一级作用域内存模块查找,如果有直接

操作,没有就继续向上查找,直到window。这种查找的方式叫做作用域链。

第四个问题:“=”的 理解???

关于“=”,他的意义不在于像数学中的=一样是1+1=2;他的运算方式是从右往左的赋值运算;提到运算,说明这并不是一个单纯的“=”。

先说运算:我们可以声明一个变量并给他赋值,如何操作?var a=12;这句代码的意思是将12赋值给变量a;也就是说=后面的数据赋值

给前面的变量;

再说“=”后面的数据,=后面的数据类型不单单是数字这么简单,它分为两种数据类型;

第一种:基本数据类型(number 、string、boolean、null、undefined);

第二种:引用数据类型(array、function、.....)

第一种数据类型是可以直接赋值的,可以直接把这些数据给前面的变量,但是第二种数据类型就没有这么单纯,我们拿数组举例,当变量

=后面的数据类型是数组时,数组就会开辟一个堆内存,将数组的内容存在里面,浏览器会给这个堆内存一个内存地址,然后把这个内存地址

赋值给=前面的变量。

第五个问题:object和json的区别???

首先,他们长得都一样,也就是书写方式都是键值对的形式存在的,object的属性名可以不加引号,json必须加的;其次object是前端的数据类型,

json是数据库的数据类型。

第六个问题:object对象的定义???

关于对象的定义,其方式就是我们直接用字面量的方式定义,直接书写一个对象;还有类的实例;

说到类的实例,也就是Object的子类(RegExp、Math、Array、String...)实例的一些子对象。

原文地址:https://www.cnblogs.com/qinlinkun/p/10255759.html