手机版

用JavaScript语句深入分析理解

时间:2021-10-31 来源:互联网 编辑:宝哥软件园 浏览:

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语句的理解。希望对大家有帮助。如果你想了解更多信息,请关注我们的网站!

版权声明:用JavaScript语句深入分析理解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。