第四章 变量、作用域和内存问题(一 )

本文探讨了ECMAScript中的变量类型、函数重载问题及变量值的复制与传递特性。介绍了基本类型与引用类型的区别,展示了如何为引用类型添加属性及方法,并解释了变量值复制与参数传递的机制。

  1接上个文章说下重载的问题。ECMAScript函数不能像传统意义上那样实现重载

  2如果在ECMAScript中定义了两个名字相同的函数,改名字只属于后定义的函数

 

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

  4字符串是一对象的形式来表示,因此被认为是引用类型的但是ECMAScript放弃了这一传统。

 

  5动态的属性

引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法

//    引用类型的值添加属性
    var person = new Object();
    person.name = "Nicholas";
    alert(person.name);//Nicholas
    //创建了一个对象并将其保存在了变量perseon中,然后我们危改对象添加了一个名为name的属性,并将字符串值Nicholas赋给了这个
    //属性。接着,又通过弹窗访问了这个新属性,

  

var name = "Nicholas";
    name.age = 27;
    alert(name.age);//undefined 因为我们不能给基本类型的值添加属性

  6复制变量值

基本类型的值:如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上

 var num1 = 5;
    var num2 = num1;
    alert(num1);//5
    alert(num2);//5

  

var num1 = 5;
    var num2 = num1;
   var num2 = 3;
alert(num2);//3 由此可见两个不干扰
alert(num1);//5 由此可见两个不干扰

  引用类型的值:

当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象,复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,将会影响另一个变量

    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Nicholas";
    alert(obj2.name);//Nicholas

  

    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Nicholas";
    obj2.name = "Jack";
    alert(obj2.name);//Jack
    alert(obj1.name);//Jack

  7传递参数

ECMAScript中所有函数的参数都是按值传递的。也就是说把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样

 

转载于:https://www.cnblogs.com/shenq/p/6187714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值