JavaScript中with语句作用和副作用实例详解

JavaScript中with语句作用和副作用实例详解,第1张

定义with语句的目的主要是为了简化多次编写同一对象的工作

with语句将object添加到作用域链的头部,然后执行statement,最后把作用域链恢复到原始状态

with(object){
  statement;
}

作用

  在对象嵌套层次很深的时候通常会使用with语句来简化代码编写。


而本质上是通过将一个对象的引用当作作用域来处理,将对象的属性当作作用域中的标识符来处理,从而创建了一个新的词法作用域

  在客户端javascript中,可能会使用类似下面这种表达式来访问一个HTML表单中的元素

document.forms[0].address.value

  如果这种表达式在代码中多次出现,则可以使用with语句将form对象添加到作用域链的顶层

with(document.forms[0]){
name.value = '';
address.value = '';
emai.value = '';
}

  这种方法减少了大量的输入,不用再为每个属性名添加document.forms[0]前缀。


这个对象临时挂载在作用域链上,当javascript需要解析诸如address的标识符时,就会自动在这个对象中查找

  [注意]with语句提供了一种读取对象的属性的快捷方式,但它并不能创建对象的属性

  如果对象o有一个属性x,那么下面代码给这个属性赋值为1

var o = {x:0};
with(o) x = 1;
console.log(o.x);//1

  如果o中没有定义属性x,下面代码和不使用with语句的代码x=1是一模一样的。


这是因为对变量x进行了LHS查询,并将1赋值给它

var o = {};
with(o) x = 1;
console.log(o.x);//undefined
console.log(x);//1

副作用

  与eval类似,with语句的javascript代码非常难于优化,同时也会给调试代码造成困难,并且同没有使用with语句的代码相比,它运算得更慢

  而且,如果with语句不当,还有可能造成变量泄漏,污染全局作用域的情况

var x = 1;
var o = {};
with(o){
x = 2;
}
console.log(x);//2
console.log(o.x);//undefined

严格模式

  严格模式下,禁止使用with语句

//SyntaxError: Strict mode code may not include a with statement
'use strict';
var o = {};
with(o){
x = 2;
}

以上就是JavaScript中with语句作用和副作用实例详解的详细内容,更多请关注php中文网其它相关文章!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/239821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018-05-30
下一篇 2018-05-30

发表评论

登录后才能评论

评论列表(0条)

保存