变量类型
ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型。
基本类型
基本类型是指简单的数据段。有五种基本数据类型:未定义、空、布尔、数字和字符串。基本数据类型是通过值来访问的,因此您可以操作存储在变量中的实际值。
复制变量值
将基本类型的值从一个变量复制到另一个变量会在变量对象上创建一个新值,然后将该值复制到为新变量分配的位置。例如:
var num 1=5;var num2=num1复制前的变量对象
复制的变量对象
参考类型
引用类型是指可能由多个值组成的对象。引用类型的值是存储在内存中的对象。JavaScript不允许直接访问内存中的位置。操作对象时,实际上是在操作对象的引用,而不是实际的对象。因此,引用类型的值是通过引用来访问的。
动态属性
引用类型值,我们可以为它们添加属性和方法,也可以更改和删除它们的属性和方法。如果对象没有被破坏或者这个属性没有被删除,那么这个属性将一直存在,但是我们不能给基本类型的值添加属性。例如:
var person=new Object();person.say=' hello警觉的(人.说);//'你好'复制变量值
将引用类型值从一个变量复制到另一个变量时,存储在变量对象中的值的副本也将放置在为新变量分配的空间中。该值的副本实际上是指向存储在堆中的对象的指针。复制后,两个变量实际上会引用同一个对象,改变一个变量会影响另一个变量。例如:
var obj1=新对象();var obj2=obj1obj 1 . say=' hello ';alert(obj 2 . say);//“你好”
传递参数
ECMAScript中所有函数的参数都是按值传递的,函数外的值复制到函数内的参数。向参数传递基本类型值时,传递的值将被复制到局部变量;当引用类型值传递给参数时,内存中该值的地址被复制到局部变量中,因此局部变量的变化将反映在函数外部。例如:
函数addTen(num){ num=10;返回数字;}var计数=20;var结果=addTen(计数);警报(计数);//20警报(结果);//30执行环境和范围
执行环境定义变量或函数可以访问的其他数据,并确定它们各自的行为。全局执行环境是最外层的执行环境。在WEB浏览器中,全局执行环境被视为窗口对象,因此全局变量和属性被创建为窗口的属性和方法。每个函数都有自己的执行环境。当执行流进入函数时,函数的环境被推入环境堆栈。函数执行后,堆栈会弹出它,并将控件返回到上一个执行环境。当代码在环境中执行时,它将创建一个可变对象的范围链。范围链的目的是确保有序地访问执行环境可以访问的所有变量和函数。范围链的前端始终是当前行代码所在的变量对象。作用域链中的下一个变量对象来自外部环境,然后下一个变量对象来自下一个外部环境。这延续到全局环境,全局执行环境中的变量对象始终是作用域链中的最后一个对象。标识符解析是沿着范围链逐级搜索标识符的过程。搜索过程总是从范围链的前端开始,然后逐步返回,直到找到标识符。
内部环境可以通过范围链访问所有外部环境,但是外部环境不能访问内部环境中的任何变量和函数。
没有块级范围
JavaScript中没有块级作用域,例如:
if(true){ var color=' blue ';}alert(颜色);//“蓝色”变量如果没有在函数中用var声明,将被更改为全局变量,例如:
函数add(num1,num 2){ sum=num 1 num 2;返回总和;}var结果=add(10,20);警报(总和);//30以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。