上下文环境

##执行上下文环境
在一段JS真正运行之前浏览器已经做了一些准备工作:
    1.变量:变量的申明,默认值为undefined;
    2.this:赋值;
    3.函数申明:赋值
变量:
console.log(a)  ---> a is not undefined

console.log(a)-----> undefined    
var a 

console.log(a)-----> undefined    
var a = 10

this:
console.log(this)  --->window{top:window,window:wina}

函数声明:

console.log(f1);  //functionf1(){}
function f1(){}    //函数申明

console.log(f2);   //undefined
var f2 = function (){}    //函数表达式


##函数中的变量


如果函数中出了以上数据外还有其他数据:
function fn(x){
    console.log(arguments);                 [10]
    console.log(x);              //----->    10
}
fn(10);

函数每被调用一次,都会产生一个新的执行上下文环境,因为不同的调用可能就会有不同的参数.
函数在定义的时候就确定了函数内部变量的作用域.



##执行上下文栈
执行全局代码时会产生一个全局上下文环境,每次调用函数时又会产生一个函数上下文环境,当函数调用完成时,这个函数上下文环境以及其中的数据都会被销毁,在重新回到全局上下文环境处于活动状态的执行上下文环境只有一个.实际上,就是一个压栈和出栈的过程.

var a = 10  //1.进入全局上下文环境
var fn = function(y){
    var c = 5;
    consolde.log(y + c);
};
var bar = function(x){
    var b = 5;
    fn(x + b);   //3.进入函数上下文环境
};
bar ();    //2.进入bar函数上下文环境
                                    

##作用域和执行上下文

作用域只是一个“地盘”,一个抽象的概念,其中没有变量,要通过作用域对应的执行上下文环境来获取变量的值,在同一作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同变量的值.

##自由变量
在A作用域中使用的变量x,却没有在A作用域中声明(在其他作用域中声明),对于A作用域来说x是一个自由变量.
var x = 10;
function(){
    console.log(x);  //x是自由变量
}


##作用域链
1.先在当前作用域中查找x,如果有则获取并结束,如果没有则继续;
2.如果当前作用域是全局作用域,则证明x未定义,结束,否则继续;
3.(不是全局作用域,就是函数作用域)将创建该函数的作用域作为当前作用域;
4.跳转到第一步.

转载于:https://www.cnblogs.com/lidongrain/p/4823831.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dbgrideh的功能

dbgrideh的功能 a.点标题排序: 1.eh的optionsEh 的dghAutoSortMarking True 2 eh的sortlocal true 3.列的title的toolbutton为true 4。eh的optionsEh 的dghMultiSortMarking True 多个字段一起排(按CTRLMouse) 5.uses加相应的驱动ehlibado/ehlibbde b.模糊过滤: …

深入A*算法

一、前言 在这里我将对A*算法的实际应用进行一定的探讨,并且举一个有关A*算法在最短路径搜索的例子。 二、A*算法的程序编写原理 A*算法是最好优先算法的一种。只是有一些约束条件而已。我们先来看看最好优先算法是如何编写的吧。 如图有如下的状态空间:…

IOS中NSUserDefaults的用法

2019独角兽企业重金招聘Python工程师标准>>> IOS中NSUserDefaults的用法(轻量级本地数据存储) 分类: IOS开发 Object-C编程语言2012-09-09 10:58 65223人阅读 评论(13) 收藏 举报 存储iosfloatinterfaceintegerdate NS…

如何做好产品经理一:你们是傻的吗?

如果你想做一个坏的产品经理, 就把那些和你意见不同的人都当作傻子。是的,你重复了好几遍你的看法,但他们就是不懂,估计他们永远都不会懂。这些人在想什么,都是傻的吗?既然你无法让这些傻子理解你说的话,干…

【Oracle 学习笔记】Day 1 常用函数整理(转换、DeCode),表的外键

select Convert(varchar,Convert(money,TaxExValue),1) from A--Result 2,794.87 58,119.66 1,367.52 对于SQL Server来说,进行金额的转换,可以按照上面的操作那样,会自动将金额处理为两位小数,并用逗号分隔小数点前面的数字。 当…

LOJ bitset+分块 大内存毒瘤题

题面 $ solution: $ 真的没有想到可以用分块。 但是可以发现一个性质,每个询问只关心这个点最后一次赋值操作,和这个赋值操作后的所有取 $ min $ 操作。这个感觉很有用,但是真的很难让人想到低于 $ n\times m $ 的做法。基于 $ DAG $ 的数据结…

Web开发编程实用手册

不要被这个名字吓到。这本手册,真的很实用。你能猜猜它有多少页么?只有62页,比起那些砖头书来,这本可以说是苗条得不能再苗条了。现在卓越搞活动,购买电子工业出版社图书,凡购买专题内图书满69元&#xff0…

版本管理工具:git svn 的比较

git:分布式。开发者可以提交到本地,每个开发者机器上都是一个完整的数据库。两个开发者之间,可以通过打patch的方式交换文件。svn:集中式。所谓 git 服务器,是指大家约定使用同一个网址提交、更新代码。这个网址可以是…

C# 配置文件 自定義結點

1. 對於配置自定義結點&#xff0c;需要繼承ConfigurationSection類。 UrlsSection : ConfigurationSection 2. 配置文件中&#xff0c;需要如下引用&#xff1a; View Code <configSections><section name"orders" type"WebApplication4.UrlsS…

uni-app 手指左右滑动实现翻页效果

首先给页面添加 touch 事件 <view class"text-area" touchstart"start" touchend"end"></view> 然后定义一个合理区间进行判断,用户当前是上下滑动看书还是左右滑动变换章节. start(e){this.startData.clientXe.changedTouches[0].c…

sizeof 再遇

看下面程序片段&#xff1a; #include <stdio.h>int main(){int a255;printf("%d\n", sizeof(a));printf("%d\n", a);return 0;}结果&#xff1a; 4255 这个是我们已经熟知的&#xff1a;sizeof是编译期求值&#xff0c;所以sizeof中表达式根本不计算…

mybatis错误之配置文件属性配置问题

在mybatis的配置文件SqlMapConfig.xml中&#xff0c;可以在开始的地方先加载一个properties节点&#xff0c;用来定义属性变量。 1 <!-- 加载属性文件 --> 2 <properties resource"db.properties"> 3 <!--properties中还可以配置一些属性…

weblogic环境搭建

官方指导文档说明&#xff1a;http://docs.oracle.com/cd/E24329_01/web.1211/e24493/getst.htm#autoId12配置管理员用户名和口令&#xff1a;名称&#xff1a;weblogic密码&#xff1a;weblogic域名&#xff1a;sniper说明&#xff1a;This user is the default administrator…

20个方法让你摆脱坏习惯

原文&#xff1a;20 Tricks to Nuke a Bad Habit翻译&#xff1a;弥缝&#xff08;褪墨&#xff09; 你的生活正在被坏习惯不断地侵蚀&#xff1f;我从几年前开始改变我的习惯&#xff0c;现在我已经养成以素食为主的用餐、每天锻炼身体、每天写新文章、早起等等好习惯&#xf…

Stream流思想和常用方法

一、IO流用于读写&#xff1b;Stream流用于处理数组和集合数据&#xff1b; 1、传统集合遍历&#xff1a; 2、使用Stream流的方式过滤&#xff1a; 其中&#xff0c;链式编程&#xff08;返回值就是对象自己&#xff09;中&#xff0c;filter使用的是Predicate函数式接口&#…

九九乘法表的C语言实现

#include "stdio.h"int main(){int i,j,a;printf("九九乘法表:\n");for(i1;i<10;ii1){for(j1;j<i;jj1){ai*j;printf("%5d*%d%d",i,j,a);if(ij)printf("\n");}}return 0; }转载于:https://blog.51cto.com/xmwen1/1697355

关于各种JOIN连接的解释说明【原创】

INNER JOIN的连接原理&#xff1a;1.从左表里取出第一行2.按照ON条件查找右表里的每一行3.找出匹配的行&#xff08;包括重复的行&#xff09;放在结果集里&#xff0c;不匹配的行则放弃。4.从左表里取出第二行5.重复步骤2-36.从左表里取出第三行7............. LEFT JOIN的连接…

Stream流方法引用

一、对象存在&#xff0c;方法也存在&#xff0c;双冒号引用 1、方法引用的概念&#xff1a; 使用实例&#xff1a; 1.1先定义i一个函数式接口&#xff1a; 1.2定义一个入参参数列表有函数式接口的方法&#xff1a; 1.3调用这个入参有函数式接口的方法&#xff1a; lambda表达式…

九度OJ 1054:字符串内排序

题目地址&#xff1a;http://ac.jobdu.com/problem.php?id1054题目描述&#xff1a; 输入一个字符串&#xff0c;长度小于等于200&#xff0c;然后将输出按字符顺序升序排序后的字符串。 输入&#xff1a; 测试数据有多组&#xff0c;输入字符串。 输出&#xff1a; 对于每组输…

为什么要在定义抽象类时使用abstract关键字

本文为原创&#xff0c;如需转载&#xff0c;请注明作者和出处&#xff0c;谢谢&#xff01;众所周之&#xff0c;在任何面向对象的语言中&#xff08;包括Java、C#&#xff09;&#xff0c;在定义抽象类时必须使用abstract关键字。虽然这已经习已为常了&#xff0c;但实际上ab…