JavaScript中有一个with关键字,with语句的初衷是为一步一步的对象访问提供一个命名空间样式的简写,即通过指定代码区域中的节点名直接调用对象。
with语句的功能是临时更改范围链并减少重复输入。
它的语法结构是:
with(object){//语句}举一个实际例子:
with(document . forms[]){ name . value=' lee king ';address.value=' Pekingzipcode.value=}对应的传统写法是:
document . forms[]. name . value=' lee king ';document . forms[]. address . value=' Peking ';document . forms[]. zipcode . value=' ';可以看出,with语句简洁明了,但在代码世界中很难找到真正的完美。
js的解释器需要检查with块中的变量是否属于with中包含的对象,这将大大降低with语句的执行速度,使js语句难以优化。为了平衡速度和代码量,我们可以找到一个折衷方案:
var form=document . forms[];form . name . value=' lee king ';form . address . value=' Peking ';form . zipcode . value=' ';因此,在未来高效的代码开发中,我们应该尽可能避免使用with语句。
已测试:
var a=123var b={ a : 321 };带(b){ console . log(a);//321 } var a=123;var b={ };b中的a属性在这里被删除,带有(b){ console . log(a);//123}从作用域链来看,在javascript中,函数也是对象。事实上,javascript中的一切都是对象。函数中有一个只被javascript引擎访问的内部属性,就是[[scope]]。此属性包含创建函数时作用域中对象的集合,此集合称为作用域链。
例如,以下代码:
函数add(num1,num 2){ var sum=num 1 num 2;返回总和;}当一个函数被创建时,它的作用域链将被一个包含所有全局变量的全局对象填充,如下图所示:
执行函数时,会创建一个活动对象,该对象包含函数的所有局部变量、命名参数和此参数。然后,对象被推到作用域链的前面,并在执行函数时被销毁。
可以看到全局变量会被活动对象推到作用域链的最后一端,这也是全局变量访问速度慢的原因!
随着
一般来说,范围链只会受到with和catch语句的影响。使用创建时,函数将创建一个新的活动对象,并将其推到前面,这是使用的对象。这意味着所有局部变量都在第二个作用域链对象中,这就是为什么应该避免使用。
以上是对边肖介绍的JavaScript中with语句的理解。希望对大家有帮助。如果你想了解更多信息,请关注我们的网站!