`
123003473
  • 浏览: 1060290 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

浅谈Javascript中的with、eval与作用域

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


with
�功能应用。

with会暂时修改作用域链。

<script> function a(){ with (b) { ... } }a(); </script> www.mrw3c.com,专业的网页设计知识库。
函数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也可以达到同样目的,效率也无损失。 Mr.W3C - 标准网页设计素材库与知识库。


var c=document.forms[0]; c.name.value=''; c.address.value=''; c.email.value=''; Mr.W3C 前期发展,离不开网络文章,您如果看到这些文字请见谅!

eval
IE下:运行eval()会受当前作用域限制,运行execScript()则无视当前作用域,直接在全局作用域下执行。 "0-J #APLYFy]aPdD6TC@f7uK=

Firefox下:eval()和window.eval()效果不一样,这很奇怪,毕竟FF下,eval==window.eval。前者会受当前作用域限制,后者无视当前作用域,在全局作用域下执行(相当于IE的execScript())。 Mr.W3C - 设计师、开发师、站长必上的网站。

分享到:
评论

相关推荐

    javascript执行环境,作用域理解

    在 JavaScript 中,执行环境和作用域是两个非常重要和基本的概念,理解了这两个概念对于 JavaScript 中很多脚本的运行结果就能明白其中的道理了。执行环境是一个概念,一种机制,用来完成 JavaScript 运行时在作用域...

    javascript中eval和with用法实例总结.docx

    ### JavaScript中的`eval`与`with`用法详解 #### 一、`eval`函数 ##### 1. 定义 `eval`是JavaScript中一个非常强大的内置函数,它可以将字符串解析并执行为JavaScript代码。这使得开发者能够在运行时动态地创建和...

    Javascript中eval函数的用法

    JavaScript 中 eval 函数的用法 JavaScript 中的 eval 函数是一个非常强大且灵活的函数,可以将一个字符串当作一个 JavaScript 表达式来执行。正如我们在上面的描述中所看到的,eval 函数可以将一个字符串解释成 ...

    在Javascript中Eval函数的使用?

    当从不可信的源获取代码时,使用`eval()`可能会导致恶意代码执行,因为它可以完全访问调用它的作用域,包括读取或修改变量、调用函数甚至控制整个应用程序。因此,除非绝对必要,否则应避免使用`eval()`。 此外,`...

    javascript中eval函数用法分析.docx

    在这个例子中,`eval()`函数在全局作用域被调用,定义了全局变量`y`,并且可以在全局作用域中被访问。 #### 三、eval函数的执行上下文 `eval()`函数的执行上下文与调用它的上下文环境相同。这意味着: - **局部...

    在Javascript中Eval函数的使用.doc

    `eval()`的基本用法是接收一个字符串参数,这个字符串被视为JavaScript代码,并在当前作用域内执行。例如,上面的例子展示了如何使用`eval()`计算字符串中的数学表达式: ```javascript var the_unevaled_answer = ...

    作用域初理解1

    在编程语言中,作用域是理解和编写有效代码的关键概念,特别是对于JavaScript这样的动态语言。作用域决定了变量的可见性和生命周期,它是由编译器和执行引擎共同作用的结果。在JavaScript中,作用域引擎负责整个程序...

    javascript中eval和with用法实例总结

    我们都知道javascript的作用域机制,但是with和eval有时会“破坏”我们对于作用域的常规理解。下面参考网上资源和自己理解总结一下eval和with的用法。 一、eval 1、eval函数:把一个字符串当作一个js表达式一样去...

    深入了解JavaScript,从作用域链开始(1).pdf

    JavaScript中的作用域是编程语言中一个关键的概念,它决定了变量和函数在何处可被访问以及它们的生命周期。在JavaScript中,有两种主要的作用域类型:全局作用域和局部作用域。 全局作用域指的是在代码的任何位置都...

    javascript 自定义eval函数实现

    JavaScript中的`eval()`函数是一个非常强大但又颇具争议的功能,它允许执行一个字符串作为JavaScript代码。在本讨论中,我们将深入探讨如何自定义`eval()`函数以提高代码的安全性和效率,同时也会涉及到JavaScript的...

    深入认识javascript中得eval函数

    3. **作用域问题**:`eval`在全局作用域或调用它的函数的作用域中执行代码。这意味着`eval`内部可以访问外部变量,也可能修改它们。这可能导致难以追踪的副作用和调试困难。 #### 四、eval函数在实际开发中的应用 ...

    javascript执行环境及作用域详解

    总的来说,JavaScript的执行环境和作用域构成了这门语言中变量和函数访问权限的基础框架。理解这些概念对于编写高效且无错误的JavaScript代码至关重要。执行环境定义了代码的执行上下文,而作用域则决定了变量和函数...

    结合代码图文讲解JavaScript中的作用域与作用域链

    JavaScript中的作用域和作用域链是这门语言中理解变量和函数如何在不同上下文中查找和访问的重要概念。作用域定义了变量和函数的可访问范围,它决定了在什么区域、什么时间,变量和函数能够被访问到。作用域链则是...

    前端开源库-scope-eval

    "scope-eval"就是这样一个专为前端设计的开源库,它专注于处理JavaScript中的`eval`函数,尤其是与作用域相关的用法。本文将深入探讨`scope-eval`库的功能、工作原理以及它在实际开发中的应用。 `eval()`函数在...

    javascript中eval函数用法分析

    本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval&#40;&#41;只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...

    global-load-from-eval-in-with.rar_inside

    根据JavaScript的规范,当“eval”在非严格模式下运行时,它会在调用它的当前作用域中执行代码。这意味着如果“eval”在“with”语句内部,它会看到那个对象以及所有全局变量。然而,在严格模式下,“eval”的行为...

    javascript执行环境及作用域详解_.docx

    在JavaScript中,执行环境的概念至关重要,因为它不仅涉及到变量的作用域,还关系到内存管理以及代码执行的流程。 每个执行环境都与一个变量对象相联系,该对象存储了环境中定义的所有变量和函数。虽然开发者无法...

    javascript中eval解析JSON字符串.docx

    ### JavaScript中eval解析JSON字符串详解 #### 一、前言 在JavaScript开发中,解析JSON字符串是一项常见的任务。其中一种方法是使用`eval()`函数。虽然这种方法并不推荐,但了解其工作原理及其潜在风险仍然非常...

    javascript eval和JSON

    ### JavaScript中的`eval`函数与JSON的理解与应用 #### `eval`函数的工作原理及应用场景 在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript...

Global site tag (gtag.js) - Google Analytics