函数作用域与执行上下文

1、代码分类:全局代码和函数(局部代码)

  代码分为编译(由JS编译器执行)阶段和执行(JS引擎执行)阶段。当代码被编译时,会创建相应的作用域,当代码被执行时,会创建相应的执行

  上下文。

2、作用域:是在编译阶段就产生的,一整套函数标识符的访问规则,由函数声明时所在的位置决定。

  作用:主要用于隔离变量,不同的作用域中变量名字可以相同

  作用域链:多个上下级关系作用域形成的链,由下向上或由内向外。定义了变量的查找规则

3、执行上下文:

  1)全局执行上下文:执行全局代码前将window确定为全局执行上下文,对全局数据进行预处理。

    -var声明的变量,添加为window属性

    -function声明的数,添加为window方法

    -this赋值为window

    -开始执行全局代码

  2)函数执行上下文:在调用函数,执行函数体之前,创建对应的函数执行上下文,对局部数据进行预处理

    -实参赋值给形参,添加为执行上下文的属性

    -argument赋值实参,添加为函数执行上下文属性

    -var声明的变量。赋值underfined,添加为函数执行上下文属性

    -function声明的函数,添加为执行上下文的方法

    -this->赋值调用当前函数的对象

    -开始执行函数体

  函数执行上下文栈:

    -在全局代码执行前, JS引擎就会创建一个栈来存储管理所有的执行上下文对象

    -在全局执行上下文(window)确定后, 将其添加到栈中(压栈)

    -在函数执行上下文创建后, 将其添加到栈中(压栈)

    -在当前函数执行完后,将栈顶的对象移除(出栈)

    -当所有的代码执行完后, 栈中只剩下window  

原文地址:https://www.cnblogs.com/qqinhappyhappy/p/11612524.html

时间: 2024-11-05 14:55:43

函数作用域与执行上下文的相关文章

JS 作用域 作用域链 执行上下文 执行上下文栈

当我想要整理作用域这块的时候,看各种博客,发现看的我都有点迷糊了,尴尬啊.. 下面说的都以下面这个例子解释 全局对象: 变量a1,函数fun1 一:作用域 在函数fun1声明时,会在scope中存放能访问到的所有资源,他能访问到的也就是全局对象. 二:作用域链 在函数执行时,会生成执行环境excution context,执行环境中存放活动对象.作用域链scope chain.this,作用域链中存放 活动对象.变量对象.全局对象 二:执行上下文 执行上下文也叫做执行环境,执行环境定义了变量或函

javascript作用域、执行上下文、原型和原型链

一.作用域js中作用域是指可访问变量,对象,函数的集合,也就是调用它们能生效的代码区块.在js中没有块级作用域,只有全局作用域和函数作用域 1.全局,函数作用域 var a = 10 function f1(){ var b = c = 20; console.log(a); ? ? //10 console.log(c); ? ? //20 function f2() { console.log(b); //20 }f2(); } f1(); console.log(a); ? ? //10

js笔记---作用域(执行上下文[execution context],活动对象) 闭包

(一)作用域: 首先,在javascript中的每个函数都是对象,是Funtion对象的一个实例,而Funtion中有一系列仅供javascript引擎存取的内部属性,其中一个便是[[scope]],它包含了一个函数被创建的作用域中对象的集合,这个集合就是函数的作用域链.当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充.例如定义下面这样一个函数: function add(num1,num2){var sum = num1+num2; return sum; } 在函数

02_作用域与执行上下文区别

<body> <!-- 1. 区别1 * 全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不是在函数调用时 * 全局执行上下文环境是在全局作用域确定之后, js代码马上执行之前创建 * 函数执行上下文是在调用函数时, 函数体代码执行之前创建 2. 区别2 * 作用域是静态的, 只要函数定义好了就一直存在, 且不会再变化 * 执行上下文是动态的, 调用函数时创建, 函数调用结束时就会自动释放 3. 联系 * 执行上下文(对象)是从属于所在的作用域 * 全局上

278 执行上下文、执行上下文栈:变量提升与函数提升,执行上下文,执行上下文栈,全局执行上下文,函数执行上下文,练习题

变量提升与函数提升 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined) 函数提升: 在函数定义语句之前, 就执行该函数 先有变量提升, 再有函数提升 变量声明提升.函数声明提升 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01_变量声明提升.函数声明提升</title> &l

javascript数据类型(六)--- 函数对象之执行上下文

一.引入 1.1 变量声明提升 通过var定义(声明)的变量, 在定义语句之前就可以访问到,其值为: undefined var a = 3 function fn () { console.log(a) //输出结果为undefined var a = 4 } fn() 1.2 函数声明提升 通过function声明的函数, 在之前就可以直接调用,其值为: 函数定义(对象) console.log(b) //undefined 变量提升 fn2() //可调用 函数提升 // fn3() //

JS高阶---作用域与执行上下文

一句话介绍 . 原文地址:https://www.cnblogs.com/jianxian/p/11971073.html

原型模式故事链(4)--JS执行上下文、变量提升、函数声明

上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~哈哈哈 我们前端的代码一般就三个部分组成html + css +js,一般呢我们的JS又会放在最后执行. 执行上下文:所谓的执行上下文,就是JS代码执行的环境. Javascript中代码的运行环境分为以下三种: 全局上下文 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境.

JS高级 -- 执行上下文与作用域链

这个问题涉及到三个点: 1. 执行上下文 2. 函数嵌套导致的执行上下文栈 3.闭包 1 <script> 2 var a = 1; 3 var f1 = function(){//第一个函数 4 var a = 2; 5 var b = 1; 6 7 var f2 = function(){//第二个函数 8 var c = 1; 9 var f3 = function(){//第三个函数 //第三个函数执行,他自己的执行上下文中没有a,b,c,则从父级函数f2的执行上下文中去找,f2中有c