JavaScript 函数的执行过程
1. 每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫”作用域链”, 集合中存储着”可变对象”VO或”活动对象”AO(AO比VO多this和arguments属性).
2. 当函数被创建后, 其父级作用域的作用域链中的所有可变对象会被加入到它的[[scope]]中(如果父作用域是全局, 那么当前函数的作用域链中就只会加入一个全局对象).
3. 当函数被执行时, 函数的执行环境会被推入一个环境栈中:
1.此时进入函数的变量初始化阶段, 此阶段会确定函数内部: this值, 函数的参数, 函数的声明, 变量的声明, 以及arguments. 根据这些值组成当前函数的活动对象AO, 之后会将AO对象保存到当前函数作用域链的首位.
注意: AO按如下顺序填充:
1.函数参数(若有传参, 会被赋值, 若未传参, 初始化值为undefined) 优先级第二
2.函数声明(若发生命名冲突, 会覆盖) 优先级最高
3.变量声明(初始化变量值为undefined, 若发生命名冲突, 会忽略) 优先级第三
2.然后就到了函数的执行阶段, 此阶段当前函数中使用到的所有变量和函数声明都会从当前函数的[[Scope]]作用域链中查找, 根据作用域链中对象的位置首先会查找当前函数的AO对象, 如果没有再查找上层对象, 最后找到全局对象, 如果都没有则会报错(变量未定义).
以上这篇JavaScript 函数的执行过程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
JavaScript 函数的执行过程
1. 每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫"作用域链", 集合中存储着"可变对象"VO或"活动对象"AO(AO比VO多this和arguments属性). 2. 当函数被创建后, 其父级作用域的作用域链中的所有可变对象会被加入到它的[[scope]]中(如果父作用域是全局, 那么当前函
-
探讨JavaScript语句的执行过程
废话不多说,直奔主题了.javascript的运行原理总结如下: 1.按照html文档流顺序执行javascript代码 浏览器是按照文档流从上到下逐步解析页面结构和信息的,javascript代码作为嵌入的脚本作为html文档的组成部分,所以javascript代码在加载时的执行顺序也是根据脚本标签<script>的出现顺序来确定的. 如果通过脚本标签<script>的src属性来引入外部.js文件,那么它也将按照其语句出现的顺序来执行,而且执行过程是文档加载的一部分.不会因为是
-
javascript函数中执行c#函数的方法
1如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数? 问题1答案如下: javaScript函数中执行C#代码中的函数: 方法一:1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2.在前台写一个js函数,内容为document.getElementById("btn1").click(); 3.在前台或后台调用js函数
-
javascript函数自动执行常用方法汇总
在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT LANGUAGE="JavaScript"> functionn MyAutoRun() { //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!"); } </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT LANGUAGE="Jav
-
用apply让javascript函数仅执行一次的代码
复制代码 代码如下: var obj = new Object(); obj.triggerOnce = function(fn) { //控制让函数只触发一次 return function() { try { fn.apply(this, arguments); } catch (e) { var txt = "There was an error on this page.\n\n"; txt += "Error message: " + e.message
-
javaScript函数中执行C#代码中的函数方法总结
方法一: 1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2.在前台写一个js函数,内容为document.getElementById("btn1").click(); 3.在前台或后台调用js函数,激发click事件,等于访问后台c#函数; 方法二:1.函数声明为public 后台代码(把public改成protected也可以) 以下是引用片段: 复制代码 代码如下: public string ss() { return("a&quo
-
虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
复制代码 代码如下: #include<iostream> class base{public: base() { std::cout<<std::endl; std::cout<<"base constructor"<<std::endl; func1(); std::cout<<std::endl; } virtual ~base() {
-
返回函数的JavaScript函数
几个星期前,我发了一条微博说我喜欢返回函数的函数.很快就出现了几个回复,基本是都是-.什么东东?!对于一个程序员来说,理解返回函数的函数是一个非常重要的技能,使用它你能节省很多代码,让JavaScript更高效,让你进一步理解JavaScript的强大之处.下面是我写的几个简单的例子,我希望通过它你能理解我所表达的意思. 假设你有一个对象,包含有两个子对象,它们都有get方法,这两个方法非常相似,稍有不同: var accessors = { sortable: { get: function(
-
JavaScript中的执行环境和作用域链
前言 JS 中的执行环境和作用域链是非常重要的概念,它们是 JS 引擎在处理 JS 代码的时候对变量和函数的处理方式,这两个概念的正确理解能够帮助我们更好地理解和预测代码的行为. 执行环境 执行环境定义了变量或者函数有权访问的数据集合,每一个执行环境都有一个与之关联的变量对象,该执行环境中定义的所有变量和函数都保存在这个对象中.我们无法直接访问这个对象,这个对象只是在解析器处理数据的时候使用. 我们平时说的全局变量就是在最外围的一个执行环境中定义的变量,全局执行环境根据 ECMAScript 的
-
C# javaScript函数的相互调用
问: 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数? 问题1答案如下: javaScript函数中执行C#代码中的函数: 方法一:1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2.在前台写一个js函数,内容为document.getElementById("btn1").click(); 3.在前台或后台调用
随机推荐
- Oracle 手动创建数据库步骤详解
- php操作xml入门之cdata区段
- Javascript生成json的函数代码(可以用php的json_decode解码)
- jquery中EasyUI使用技巧小结
- javascript简单实现图片预加载
- 基于Spring MVC 简介及入门小例子(推荐)
- IOS实现点击滑动抽屉效果
- 让alert不出现弹窗的两种方法
- 基于ajax html实现文件上传技巧总结
- Ajax使用JSON数据格式案例
- JavaScript数组各种常见用法实例分析
- mongodb 3.2.5安装详细过程
- npm国内镜像 安装失败的几种解决方案
- 与ASCII码相关的C语言字符串操作函数
- C#创建缩略图操作类实例
- PHP+ajax分页实例简析
- 关于PHP中Session文件过多的问题及session文件保存位置
- VsCode插件开发之插件初步通信的方法步骤
- python实现nao机器人手臂动作控制
- pandas 时间格式转换的实现