欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript变量、作用域的问题讲解

程序员文章站 2022-05-31 17:45:58
一、变量的复制 1、保存基本类型值的变量: 复制此变量,就是将保存的值复制给新变量。原来的变量和复制的新变量,以后对其进行操作互不影响。 2、保存引用类型值的变量: 复制此...
一、变量的复制

1、保存基本类型值的变量:

复制此变量,就是将保存的值复制给新变量。原来的变量和复制的新变量,以后对其进行操作互不影响。

2、保存引用类型值的变量:

复制此变量,就是将保存的能找到引用类型值的路径复制给新变量。原来的变量和复制的新变量,以后对其进行操作相互影响。

二、内存分为堆和栈两个部分。其中基本类型的值保存在栈中,引用类型的值保存在堆中。

变量是储存在内存中的栈中。

1、保存基本类型值的变量:

变量是储存在内存中的栈中并且基本类型的值也是储存在栈中,复制该变量,在栈上会开辟新的内存空间,存放复制的变量,并且这两个变量以后的操作互不影响。因为此变量保存的就是实际的基本类型的值。

2、保存引用类型值的变量:

引用类型的值是储存在内存中的堆中,同时此变量保存的并不是实际的引用类型的值,而是保存着能找到引用类型值的路径,在栈中复制变量,只是相当于把路径复制了,也就是两个变量都能通过相同路径找到同一引用类型,操作其中一个变量去改变引用类型的属性,也会影响另一个变量的相同属性。也就是说这两个变量的操作是相互影响的。

三、函数的参数是一个变量

在 ecmascript中,所有函数的参数都是按值或按路径传递的。将函数外部变量放到函数里作为参数,实际上是将外部变量保存的值或者路径复制一份给函数的参数变量。

四、检测类型

typeof 是用来检测基本数据类型的。

instanceof 是用来检测引用数据类型的。

五、全局变量和局部变量

全局变量:定义在函数外部的变量,或者函数内部未用var声明的变量。任何地方都可以访问全局变量。

局部变量:定义在函数内部并用var声明的变量。只有在函数内部才可以访问此变量。

(作用域:变量起作用的区域。分为:全局作用域和局部作用域)

六、作用链

例:在函数内部访问变量a,会先在最近的作用域下寻找是否有用变量a,如果没找到,则会去上一级作用域下寻找用变量a,就这样一级一级的往上寻找,直到找到为止。

(注意:只找用var声明的变量a,无论变量a是否赋值或者没用var声明但已经赋值的变量a)

七、没有块级作用域

由“{}”括号封闭的代码称为代码块。js中,代码块中定义的变量可以在代码块内、外进行访问。在其他语言中,则只能在代码块内部进行访问。