JavaScript中with()语句替换改写方法及写法正误咨询
第二种写法是正确的。
原理说明
with(obj) 语法的作用是将指定对象临时加入作用域链的最顶层,其代码块内所有未显式声明、未指定所属对象的标识符,都会优先从该对象的属性中查找匹配。
你原代码中的with块:
with( area ) surface = ( x2 - x1 ) * ( y2 - y1 );
等价的完整显式写法就是:
area.surface = ( area.x2 - area.x1 ) * ( area.y2 - area.y1 );
第一种写法的问题
第一种写法中用到的x2、x1、y2、y1没有显式绑定到area对象,你当前的函数作用域内并没有定义这些独立变量,运行时会直接抛出ReferenceError: x2 is not defined的错误,无法正常执行。
额外说明:with语法因为会导致作用域查找逻辑不清晰、存在变量泄露的风险,在严格模式下已经被禁用,日常开发更推荐使用第二种显式访问对象属性的写法,可读性和可维护性都更高。
内容的提问来源于stack exchange,提问作者leoplaw
相关产品推荐
相关产品推荐

