第一个问题:什么是作用域???
第二个问题:作用域在什么情况下会形成???
第三个问题:什么是变量提升及作用域链???
第四个问题:“=”的 理解???
第五个问题: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...)实例的一些子对象。