可能有些朋友对JavaScript中的with并不熟悉,其实with会暂时修改作用域链,当我们定义了函数a,也就确定了a的作用域链,下面青岛星网跟大家分享:JavaScript with 用法详解
<script> function a(){ with (b) { ... } }a(); </script>
暂且认为这条链的最顶端是全局对象window。当函数a被执行的时候,javascript引擎生成了一个call object并将其添加到作用域链尾部上(window对象之后),语句运行到with(b)时,将b添加到作用域链的尾部,所以with之内的变量查找,就会优先从这条链的b上查找---> 然后从a的call object中查找---> 最后查找window。with内的语句执行完之后,作用域链恢复原状(b被移出作用域链)。
但是对with的使用,很多人不推荐,因为With操作作用域链,导致with语句之前的变量查找路径变长,执行效率低下;但有些人认为with能节省代码量,比如:
with(document.forms[0]){ name.value=''; address.value=''; email.value=''; }
就能少写不少document.forms[0],其实定义一个局部变量取代with中的b也可以达到同样目的,效率也无损失,来看下代码:
var c=document.forms[0]; c.name.value=''; c.address.value=''; c.email.value='';