JavaScript的变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值引用类型值

=>基本类型值指的是简单的数据段(基本类型值不是对象)

=>引用类型值指那些可能由多个值构成的对象(var person = new Object(  ))

{

动态的属性:对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。如果对象不被销毁或者这个属性不被删除(delete),则这个属性将一直存在。

var person = new Object( );

person.name =  "royluck";

alert("person.name");//royluck

注:不能给基本类型的值(var person = "royluck"; person.age = 25;)添加属性,尽管这样做不会导致任何错误(会显示undefine),只能给引用类型值动态添加属性,以便将来使用。

}

typeof()操作符用于确定一个变量是字符串、数值、布尔值,还是undefined的最佳工具,如果变量的值是一个对象或null,会返回“object”,检测函数时,该操作符会返回“function”。==》typeof是检测基本数据类型的得力助手,但在检测引用类型的值时,这个操作符的用处不大,通常我们并不想知道某个值是对象,而是想知道它是什么类型的对象。

instanceof()操作符用于确定某个值是什么类型的对象。(如果变量是给定引用类型(通过它的原型链来识别)的实例,那么instanceof会返回true)

instanceof()操作符用于确定某个值是什么类型的对象。

>> 引用数据类型:

>> ECMAScript中所有函数的参数都是按值传递的,参数实际上是函数的局部变量不会影响函数外部的变量。


在这个函数内部,obj和person引用的是同一个对象。当在函数内部为obj添加name属性后,函数外部的person也将有所反映;因为person指向的对象在堆内存中只有一个,而且是全局对象。
这说明即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕之后立即被销毁。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容