博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js学习笔记3:with语句的使用
阅读量:5447 次
发布时间:2019-06-15

本文共 1129 字,大约阅读时间需要 3 分钟。

with语句

with是ECMAScript规定的内容,主要用于设置代码在特定对象中的作用域。

var sMessage = "hello";with(sMessage) {  console.log(toUpperCase());    //输出 "HELLO"} //等同于 alert(sMessage.toUpperCase())

with语句可以在不造成性能损失的情況下,减少变量的长度

with(Math){            length=PI*r*2            x=r*cos(deg)            y=r*sin(deg)            area=PI*r*r        }

上面代码指定Math作为默认对象,先在对象内寻找PI、cos、sin函数与属性,无需Math.PI、Math.cos()、Math.sin()这样写,可以减少不必要的指针路径解析运算,但是可以用临时变量来达到同样的效果。

with(o1.o2.o3) {            console.log(p1 + p2);        }        // 可以写成        var temp = o1.o2.o3;        console.log(temp.p1 + temp.p2);

看了几篇博客和资料,都不太推荐with语句的使用。

1、先在指定的对象再去其他对象查找变量会很慢。

第一个例子里面,当操作变量r与deg时,首先在Math对象里面找不到,之后会再去其他的对象里面寻找。在对性能要求比较高的场合,with里面的语句块,应该只包含指定对象的属性和方法,但是这一点很明显是不太可能滴。

2、容易语义不明,绑定对象不明确,拖慢运行速度。

function f(x, o) {  with (o)    print(x);}

上面几行代码,如果对象o里面定义了属性x,那么输出的就是o.x,如果没有的话也不会报错,会返回上一级作用域,输出x的值。

万一需要取得是o.x,而某个粗心的队友恰好没有初始化o.x,那就等着完犊子吧,很难出原因来,因为编译器根本就不会报错,这样使用with不利于代码的除错和模块化,编译器也无法对这段代码进行优化,只能留到运行时判断,这就拖慢了运行速度。

3、在 ECMAScript 5 中该标签已被禁止。推荐的替代方案是声明一个临时变量来承载你所需要的属性。

with语句少数有用场合之一,就是替换模板变量,不过这个我还没研究明白,等以后有时间再完善。

参考资料:

转载于:https://www.cnblogs.com/BoqianLiu/p/9258000.html

你可能感兴趣的文章
test
查看>>
LVS 负载均衡 keepalive
查看>>
The eleven Day
查看>>
HTTP 无法注册URL 进程不具有命名空间的访问权限
查看>>
spring 基于multipart 文件上传
查看>>
循环冗余校验(CRC)算法入门引导
查看>>
Swift继承的用法
查看>>
【[六省联考2017]组合数问题】
查看>>
数据结构与算法学习 第1季02 链表的基本功能 C++实现
查看>>
Oracle Listener
查看>>
java String spilt 问题
查看>>
【P3056】【USACO12NOV】笨牛Clumsy Cows
查看>>
准标识符(Quasi-dientifier, QI)
查看>>
深入理解VMware虚拟机网络通信原理
查看>>
Linux命令——find/grep
查看>>
TJU1016
查看>>
HttpClientUitl工具类
查看>>
Could not find or load main class
查看>>
VC 预定义宏
查看>>
indexOf()
查看>>