Javascript中eval与with如何使用

这篇文章将为大家详细讲解有关Javascript中eval与with如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站从2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元沁水做网站,已为上家服务,为沁水各地企业和个人服务,联系电话:18980820575

javascript的作用域是词法作用域(lexical scope or static scope),也就是说作用域链在定义的时候就确定了。也提到eval、with会扰乱作用域链(dynamic scope)。

eval

IE下:运行eval()会受当前作用域限制,运行execScript()则无视当前作用域,直接在全局作用域下执行。

Firefox下:eval()和window.eval()效果不一样,这很奇怪,毕竟FF下,eval==window.eval。前者会受当前作用域限制,后者无视当前作用域,在全局作用域下执行(相当于IE的execScript())。

有人写了一篇比较通俗的,参考这篇文章

with

with会暂时修改作用域链。


函数a在定义的时候,就确定了a的作用域链,我们姑且认为这条链的最顶端是全局对象window。

当函数a被执行的时候,javascript引擎生成了一个call object并将其添加到作用域链尾部上(window对象之后),语句运行到with(b)时,将b添加到作用域链的尾部,所以with之内的变量查找,就会优先从这条链的b上查找---> 然后从a的call object中查找---> ***查找window。with内的语句执行完之后,作用域链恢复原状(b被移出作用域链)。

以上就是例子代码运行时的微观世界。

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='';

关于Javascript中eval与with如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


新闻名称:Javascript中eval与with如何使用
文章位置:http://hxwzsj.com/article/psheje.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 重庆电商网站建设 泸州网站建设 成都网站建设 成都网站建设 成都网站建设 高端定制网站设计 成都网站设计 营销型网站建设 网站制作 成都网站建设 网站建设改版 品牌网站建设 自适应网站建设 网站设计公司 成都网站设计 成都网站建设 上市集团网站建设 温江网站设计 达州网站设计 网站建设费用 成都网站建设 企业网站建设