web前端之JavaScript高级程序设计一:变量、作用域

web前端之JavaScript高级程序设计一:变量、作用域

前面的一部分语法:

关键字和保留字:
ECMA-262 描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作。
break do instanceof typeof
case else new var
catch finally return void
continue for switch while
debugger function this with
default if throw
delete in try

ECMA-262 还描述了另外一组不能用作标识符的保留字。
abstract enum int short
boolean export interface static
byte extends long super
char final native synchronized
class float package throws
const goto private transient
debugger implements protected volatile
double import public

for-in语句:

for (var propName in window) {
    document.write(propName);
}

label语句:

start: for (var i=0; i < count; i++) {
    alert(i);
}

break和continue语句:

var num = 0;
for (var i=1; i < 10; i++) {
    if (i % 5 == 0) {
        break;
    }
    num++;
}
alert(num);

switch语句:

switch (i) {
    case 25:
        alert("25");
        break;
    case 35:
        alert("35");
        break;
    case 45:
        alert("45");
        break;
    default:
        alert("Other");
}

基本类型和引用类型的值:

var person=new Object();
person.name="FZW";
name.age=12;
alert(person.name);
alert(name.age);

只能给引用类型值动态地添加属性,以便将来使用

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

num1中保存的值是5。当使用num1的值来初始化 num2 时,num2中也保存了值5。但num2中的5与num1中的5是完全独立的,该值只是num1中5的一个副本。此后,这两个变量可以参与任何操作而不会相互影响。

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

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

function addTen(num){
    var num;
    num +=10;
    return num;
};
var count=20;
var result=addTen(count);
alert(count);//20
alert(result);//30

这里的函数 addTen()有一个参数 num,而参数实际上是函数的局部变量。在调用这个函数时,变量 count 作为参数被传递给函数,这个变量的值是 20。于是,数值 20 被复制给参数 num 以便在 addTen()中使用。在函数内部,参数 num 的值被加上了 10,但这一变化不会影响函数外部的 count 变量。参数num 与变量 count 互不相识,它们仅仅是具有相同的值。假如 num 是按引用传递的话,那么变量 count的值也将变成 30,从而反映函数内部的修改。

function setName(obj){
    obj.name="123";
};
var person=new Object();
setName(person);
alert(person.name);

obj 和 person 引用的是同一个对象。于是,当在函数内部为 obj 添加 name属性后,函数外部的 person 也将有所反映;因为 person 指向的对象在堆内存中只有一个,而且是全局对象。

typeof 操作符是确定一个变量是字符串、数值、布尔值,还是 undefined 的最佳工具。
如果变量是给定引用类型的实例,那么instanceof 操作符就会返回 true。
alert(person instanceof Object); // 变量 person 是 Object 吗?

执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
作用域解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值