码迷,mamicode.com
首页 > 其他好文 > 详细

2015.09.22

时间:2015-09-22 20:23:36      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

在预解析过程中:
1、变量、变量的声明: 默认赋值为undefined
2、this: 赋值
3、函数声明: 赋值
这三种数据的准备情况我们称之为“执行上下文”或“执行上下文环境”;


函数中的变量:
如果在函数中,除了以上数据之外,还会有其他的数据,如
function fn(x) {
console.log(arguements);
console.log(x);
}
fn(10);
说明:函数每被调用一次,都会产生一个新的执行上下文环境,因为不同的调用可产生不同的执行环境。
var a = 10;
function fn(){
console.log(a); // a 是自由变量
} //函数创建时,就确定了a要取值的作用域
function bar(fn){
var a = 20;
fn(); //打印“10”,而不是“20”

}
bar(fn);
说明:函数定义的时候,就已经确定了函数体内部变量的作用域


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

var a = 10;
c = 20;
function fn(x){
var a = 100;
c = 200;
function bar(x){
var a = 1000;
d = 4000;
}
}
bar(100);
bar(200);
}
fn(10);

作用域和上下文关系:
var a = 10;
c = 20;
产生全局上下文环境
全局作用域
function fn(x){
var a = 100;
c = 200;
产生fn(10)上下文环境
fn作用域
function bar(x){
var a = 1000;
d = 4000;
产生bar(100)上下文环境
产生bar(100)上下文环境
bar作用域
}

bar(100);
bar(200);
}
fn(10);

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

2015.09.22

标签:

原文地址:http://www.cnblogs.com/zhaoyongblog/p/4830206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!