总结下js的加载到执行,浏览器都做了什么,如何形成js函数作用域链。
看下面的代码:
<script> function addEvents(){ var id = “form1”; document.getElementById(“save_button”).onclick = function(event){ sumitForm(id); }; } </script>
函数加载到页面,浏览器开始解释
add函数被创建,浏览器将add可访问的作用域的对象放入add的[[scope]]①属性中,供函数执行时候用。
addEvent ();
函数执行时候,浏览器会做一些准备
1、 浏览器会创建一个运行期上下文(类似编译原理所说的运行栈),用于定义函数执行时的环境,当函数执行完毕就会删除。
2、 浏览器将addEvent的scope属性复制到上下文的作用域链scope chain中。
3、 浏览器根据addEvent创建一个活动对象,该对象类似map键值对,包含了addEvent函数的局部变量,并将活动对象放入作用链数组的最顶层。
如图:
这里可以看到很多东西,例如
1、访问局部变量比全局变量速度快。
2、因为局部变量在作用域链的顶端,在函数中将频繁使用的全局变量赋值给局部变量,可提供程序执行的时 间。
3、With语句改变作用域链,是将一个对象放入作用域链的最顶端,这样访问with语句的对象很快,但是访问局部变量就慢了一个级了。不推荐使用with语句,因为可以将对象赋值给局部变量,访问速度也很快,节省了改变作用域链的消耗。
4、With、eval、catch子句,他们都可以改变作用域链,令到一些对访问变量进行优化的引擎没法正常优化 ,因为可以将对象赋值给局部变量,访问速度也很快,节省了改变作用域链的消耗。
(待续 下篇 闭包作用域链)
相关推荐
JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...
JavaScript函数作用域链是理解JavaScript执行环境和变量访问机制的关键概念。作用域链是由作用域构成的链式结构,它决定了变量的查找顺序和访问权限。每个函数在创建时都会与一个作用域链关联,这个链是根据函数的...
作用域链是JavaScript中另一个核心概念,它是由函数创建时的作用域决定的,包含了函数被创建时所有可访问的数据对象。这个链由内部属性[[Scope]]定义,它包含了函数定义时所在作用域的对象集合。当函数执行时,会...
JavaScript中的作用域链是编程中一个至关重要的概念,它决定了变量和函数的可访问性以及在不同作用域内的查找顺序。在深入理解作用域链之前,我们首先要了解什么是执行环境和变量对象。 执行环境,简单来说,就是...
JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 首先,看看 JavaScript 的作用域链是如何工作的。JavaScript 首先在当前作用域中查找变量,如果没有定义,则会继续查找上一层作用域,直到找到...
总结来说,JavaScript中的函数作用域和变量提升是理解JavaScript执行机制和避免作用域相关错误的关键。通过以上示例,我们可以看到在函数作用域中变量如何表现,以及局部变量如何与全局变量进行互动。理解和掌握这些...
在JavaScript编程中,作用域和作用域链是影响程序性能的关键因素之一。优化作用域链是提高JavaScript代码执行效率的重要手段。下面我们从多个方面来详细探讨作用域链的概念、作用域链的层级关系、变量访问的性能影响...
- 当在函数内部试图访问一个变量时,JavaScript会沿着作用域链从当前执行上下文的AO开始查找。如果找不到,就向上层AO查找,直至全局GO。如果全局GO也找不到,就会引发`ReferenceError`。 5. **闭包**: - 当一个...
JavaScript 函数作用域知识点详解: JavaScript 是一种基于函数作用域的语言。在讨论函数作用域之前,有必要了解什么是作用域。在编程中,作用域是变量和函数的可访问范围。作用域决定了代码块外部能否访问到代码块...
在ES6之前,javascript只有全局作用域和函数作用域。所谓作用域就是一个变量定义并能够被访问到的范围。也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数...
JavaScript中的作用域链是理解嵌套函数行为的关键。作用域链主要涉及到变量和函数的查找规则,它决定了在哪个作用域中查找变量。当一个函数被嵌套在另一个函数内部时,内部函数可以访问外部函数的所有变量,而外部...
JavaScript作用域是指在JavaScript代码中,变量、常量、对象和函数能够访问的...在开发中,应根据需求合理使用全局作用域、局部作用域、块作用域和函数作用域,并注意作用域链的查找机制,避免不必要的错误和性能问题。
**认识JavaScript函数作用域** 函数作用域是编程中一个关键概念,它决定了变量在何处可以被访问。在JavaScript中,作用域主要分为三类:全局作用域、函数作用域和块级作用域(自ES6引入)。 1. **全局作用域**: ...
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...
// 局部变量:在函数作用域之间里的一个或者多个函数或者作用域,在局部作用域中定义的变量 局部变量。只有在该作用域内可以访问 // 局部作用域:任何一个函数的内部都有一个局部作用域,在局部作用域中定义的...
在JavaScript中,每个执行上下文(如全局执行上下文或函数执行上下文)都有一个与之关联的作用域链。作用域链由当前执行上下文及其所有父级执行上下文的变量对象组成。 当一个函数被调用时,一个新的执行上下文被...
总的来说,深入理解JavaScript的作用域和作用域链对于编写高效、无bug的代码至关重要。通过掌握这些基本概念,开发者可以更好地管理变量和函数的生命周期,避免全局变量的滥用,并有效地组织代码逻辑。
JavaScript的作用域链是理解JavaScript执行环境的关键概念,它决定了变量和函数的可访问性。在JavaScript中,每个函数都有自己的作用域,而这些作用域按照特定的顺序组织起来,形成了作用域链。这个链帮助解析器在...