javascript高级程序设计笔记(二)

1、在for 循环的变量初始化表达式中,也可以不用var关键字。该变量的初始化可以在外部执行。
var count = 10;
var i;
for (i = 0; i < count; i++) {
    alert(i);
}
由于ECMAScript不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。

var count = 10;
for (var i= 0; i < count; i++) {
    alert(i);
}
alert(i);
2、for-in:for(property in expression) statement
3、label- break-continue
break:立即退出循环,强制执行循环后面的语句
continue:立即退出循环,但退出循环后会从循环的顶部继续执行
与label 联合使用

var num = 0;

outerLoop:
for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == 5 && j == 5) {
            break outerLoop;//要返回到的标签
        }
        num++;
    }
}
alert(num);  //55

break退出内部j 的for循环,而且退出外部的for 循环。

var num = 0;

outerLoop:
for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == 5 && j == 5) {
            continue outerLoop;
        }
        num++;
    }
}
alert(num);  //95

continue 语句会强制继续执行循环,退出内部循环,执行外部循环。

4、width语句的作用是将代码的作用域设置到一个特定的对象中。主要目的是简化多次编写同一个对象的工作。
width(expression) statement
举例:
var qs=location.search.substring(1);
var hostname=location.hostname;
var url=location.href;
转化成 with

with(location){
var qs=search.substring(1);
var hostname=hostname;
var url=href;
}
在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部变量中找不到该变量的定义,就会查询location对象中是否有

同名的属性。如果发现了同名的属性,则以location对象属性的值作为变量的值。

提示:大量使用with会导致性能下降。

5、switch -如果表达式等于这个值,则执行后面的语句。 切记expression=value。
switch (expression) {
    case value: statement; break;
    case value: statement; break;
    case value: statement; break;
    case value: statement; break;
    default:
        statement;                      
                        
}

在switch 中可以使用任何数据类型,case的值不一定常量,可以是变量,甚至表达式。
看下,下面这个地方哪错了。

var num=7;
switch (num) {
        case num < 0: alert("less than 0"); break;
        case num >= 0 && num <= 10: alert("between 0 and 10"); break;
        default: alert("more than 10");
}

最后alert的值是 more than 10

有些不解了吗?如果了解,请完全跳过。
num=7 那么,case num<0 是 false,value=false 与 expression=7 这个肯定是不行的啦。
PS: switch语句在比较值时使用的是全等操作符,因此不会发生类型转换。

所以应该更改为:
var num=7;
switch(true){
 case num < 0: alert("less than 0"); break;
        case num >= 0 && num <= 10: alert("between 0 and 10"); break;
        default: alert("more than 10");
}

6、函数中return 语句,可以不带有任何返回值 return; 这个情况下,函数在停止执行后将返回undefined值。
这种方法用在需要停止函数执行且又不需要返回值得情况下。
7、ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,在调

用这个函数时也未必一定要传递两个参数。因为ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终都是一个数组。
arguments对象只是与数组类似,它并不是Array的实例。

function sayHi(name,message) {
    alert("Hello " + name + "," + message;
}
等价于
function sayHi() {
    alert("Hello "+ arguments[0]+","+arguments[1]);
}
命名的参数只提供便利,不是必需的。
sayHi("May");
没有传递值得命名参数将自动被赋予undefined的值。这个与定义了变量却没有初始化一样。

可以依据arguments.length来判断传入参数多少,可以实现类似重载的功能。
8、ECMAScript函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。
9、ECMAScript变量包含两种不同数据类型的值:基本类型值和引用类型值。
基本类型值指的是保存在栈内存中的简单数据段。引用类型值指的是保存在堆内存中的对象,其实变量中保存的是指针,这个指针指向内存中

的另一个位置,该位置保存对象。
基本数据类型:Undefined,Null,Boolean,Number,String。在内存中占有固定大小的空间,可保存在栈内,提高查询变量的速度。按值访问。
引用类型的值大小不固定,只能将内存地址保存在栈内。
从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一对象。
确定值是那种基本类型用 typeof,确定是那种引用类型用 instanceof: variable instaceof  constructor: per instanceof Object
10、所有变量都存在于一个执行环境(作用域)。这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。
执行环境有全局执行环境和函数执行环境之分;每次进入一个新执行环境,都会闯将一个用于搜索变量和函数的作用域链;
函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;
全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中任何数据;
变量的执行环境有助于确定应该合适释放内存。

延长作用域链 try-catch,width

11、JavaScript没有块级作用域。由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部环境中。
如for (var i = 0; i < 10; i++)
{ dosomething(); }
alert(i);

12、垃圾收集算法:"标记清除"(主流)、"应用计数"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值