JS的with关键字到底是什么?
2024-09-06 08:59:03
with关键字
with在JS中通常被当做重复引用同一个对象多个属性的快捷方式。
var obj = {
a: 1,
b: 2,
c: 3
};
// 重复引用obj进行属性赋值
obj.a = 3;
obj.b = 4;
obj.c = 5;
// 等价于以下代码
with (obj) {
a = 3;
b = 4;
c = 5;
}
但会有奇怪的副作用,比如:
function foo (obj){
with (obj) {
a: 2;
}
};
var o1 = { a: 3 };
var o2 = { b: 3 };
foo(o1);
console.log(o1.a); // 2
foo(o2);
console.log(o2.a); // undefined
console.log(a); // 2,a可以从全局访问到!变量泄漏!
你可以想一下为什么会造成变量泄漏
?
严格模式下,eval和with都是禁止的,因此不要使用。
最新文章
- iOS学习笔记——使用ChildViewController
- 微软自带的Serialization和Newtonsoft简单测试
- [转]STL中vector转数组(实际是数组的指针)
- codeigniter在nginx 下支持pathinfo和去除index.php的方法
- jps用法
- Mysql配置调优(转自阿铭论坛)
- Webbrowser加载Flash后方向键失效问题(用到了OLE接口,没有被处理就转发,够复杂的)
- 通过DeviceIoControl读磁盘的方式读取独占文件内容
- c/c++ linux 进程间通信系列6,使用消息队列(message queue)
- AVPass技术分析:银行劫持类病毒鼻祖BankBot再度来袭,如何绕过谷歌play的杀毒引擎?
- Codeforces 420D Cup Trick 平衡树
- js页面停留时间
- leetcode-[3]Max Points on a Line
- MySQL(五)之DDL(数据定义语言)与六大约束
- Python 访问set
- php比较函数,判断安全函数
- Django模型与创建管理员用户
- SQL-修改: 将日期修改为空NULL、修改为空的记录
- Unity3d Attribute 总结
- 单周期CPU设计