1.1 执行环境及作用域
1.1.1 延长作用域链
利用:有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。
在以下两种情况下会发生:
- try - catch 语句的catch块;
- with语句;
以上语句都会在作用域链的前端添加一个变量对象,with语句会将指定的对象添加到作用域链中。对catch语句来说,会创建一个新的变量对象,包含被抛出的错误对象声明。
ps:
with 语句 为一个或一组语句指定默认对象,为逐级的对象访问提供命名空间式的速写方式。
用法:with (<对象>) <语句>;
with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:
with (Math) {
x = cos(3 * PI) + sin(LN10); y = tan(14 * E); }
使用with语句的JavaScript代码很难优化,因此它的运算速度比不使用with语句的等价代码要慢得多。
而对于with语句实现的语句简化,我们完全可以使用变量来实现。
例如:
var form = frames[1].document.forms[0];
form.address.value = ‘http://www.****.com/’;
form.email.value = ‘***@163.com’;
1.1.2 没有块级作用域
js 高级程序设计 p76 暂不叙述