JS基础--with()语的作用域链,内存泄漏,低性能

with语句的使用,多用于简化对对象属性的引用,其语法为将参数添加到执行环境的活动变量中,将延长作用域链。

如果使用不当,将造成内存泄漏。例如:

with(aaa){

   //aaa属性可直接

  var a= aaa.attr1

}

其中的aaa变量将直接添加在with()所在执行环境的作用域链中。

当attr1属性不存在于aaa变量中,将产生一个全局属性,导致尽管with()所在的执行环境销毁之后aaa依然无法被回收。

内存泄漏:未被引用,也无法释放的变量。将占用内存。而分配给WEB浏览器的可用内存数量通常少于桌面应用程序(防止运行JS的网页耗尽全部系统内存导致的系统崩溃),因此将影响运行性能。

此外,with语句将降低JS引擎的优化性能。其查询标识符的顺序,将无法使用优化方法,而只能沿作用域链逐层查找。

猜你喜欢

转载自blog.csdn.net/lamanchas/article/details/95041382