JavaScript作用域
2014-11-11 14:37
120 查看
我们知道Javascript中的变量是松散类型的,它的值和类型在脚本生命周期内都可以改变。Javascript变量可以保存两种不同类型的值:基本类型和引用类型
基本类型:简单的数据段
引用类型:多个值构造的对象
在将一个值赋给变量是,解析器必须确定这个是基本类型还是引用类型,引用类型是保存在内存中的对象,Javascript不允许直接访问内存位置,所以在操作对象时实际上是操作对象的引用而不是实际的对象,即是按引用访问的
PS:这种方法对于基本类型是无效的
把一个基本类型的值赋值给另一个变量,会在这个变量上面创建该值的副本,然后分配到新变量的位置,这个两个变量的值,完全独立,互不影响
②引用类型的赋值
把一个引用类型的值赋值给另一个变量,会将存储对象位置的指针赋值给新变量,这个两个变量实际引用了同一个对象,改变其中一个变量就会影响另一个变量
下面看两个例子:
基本类型:简单的数据段
引用类型:多个值构造的对象
在将一个值赋给变量是,解析器必须确定这个是基本类型还是引用类型,引用类型是保存在内存中的对象,Javascript不允许直接访问内存位置,所以在操作对象时实际上是操作对象的引用而不是实际的对象,即是按引用访问的
引用类型的动态性
对于引用类型,我们可以动态的为其添加属性和方法,而基本类型则不可这样操作var person=new Object(); person.name="Jack"; alert(person.name); //Jack
PS:这种方法对于基本类型是无效的
变量的赋值方式
①基本类型的赋值把一个基本类型的值赋值给另一个变量,会在这个变量上面创建该值的副本,然后分配到新变量的位置,这个两个变量的值,完全独立,互不影响
②引用类型的赋值
把一个引用类型的值赋值给另一个变量,会将存储对象位置的指针赋值给新变量,这个两个变量实际引用了同一个对象,改变其中一个变量就会影响另一个变量
var obj1=new Object(); var obj2=obj1; obj1.name="Jack"; alert(obj2.name); //Jack
函数参数的传递方式
在Javascript中所有函数的参数都是按值传递的,在想参数传递值时,被传递的值会被赋值一个给局部变量,即命名参数,也就是arguments对象中的一个元素。当然对于引用类型,实际上赋值的对象的引用下面看两个例子:
function add(num){ num+=100; return num; } var count=50; var result=add(count); alert(count); alert(result);
相关文章推荐
- JavaScript作用域
- JavaScript作用域和作用域链/变量,函数提升
- JavaScript作用域原理(二)——预编译
- javascript作用域和闭包之我见
- javascript作用域
- JavaScript作用域
- Javascript作用域详解。
- JavaScript作用域
- Javascript作用域
- ife task0003学习笔记(一):JavaScript作用域
- javascript作用域
- 理解Javascript作用域
- JavaScript作用域,内部函数比参数优先级高
- JavaScript作用域学习笔记
- JavaScript作用域(Scope)
- javascript作用域
- Javascript作用域和闭包
- Javascript作用域、闭包原理以及性能问题
- JavaScript作用域和执行环境
- Javascript作用域及每一个函数都有一个call和apply方法,他们是如何改变作用域的!