时间:2021-07-01 10:21:17 帮助过:102人阅读
with语句将object添加到作用域链的头部,然后执行statement,最后把作用域链恢复到原始状态
作用
在对象嵌套层次很深的时候通常会使用with语句来简化代码编写。而本质上是通过将一个对象的引用当作作用域来处理,将对象的属性当作作用域中的标识符来处理,从而创建了一个新的词法作用域
在客户端javascript中,可能会使用类似下面这种表达式来访问一个HTML表单中的元素
如果这种表达式在代码中多次出现,则可以使用with语句将form对象添加到作用域链的顶层
这种方法减少了大量的输入,不用再为每个属性名添加document.forms[0]前缀。这个对象临时挂载在作用域链上,当javascript需要解析诸如address的标识符时,就会自动在这个对象中查找
[注意]with语句提供了一种读取对象的属性的快捷方式,但它并不能创建对象的属性
如果对象o有一个属性x,那么下面代码给这个属性赋值为1
如果o中没有定义属性x,下面代码和不使用with语句的代码x=1是一模一样的。这是因为对变量x进行了LHS查询,并将1赋值给它
副作用
与eval类似,with语句的javascript代码非常难于优化,同时也会给调试代码造成困难,并且同没有使用with语句的代码相比,它运算得更慢
而且,如果with语句不当,还有可能造成变量泄漏,污染全局作用域的情况
严格模式
严格模式下,禁止使用with语句
以上就是JavaScript中with语句作用和副作用实例详解的详细内容,更多请关注Gxl网其它相关文章!