//javascript 作用域(全局、函数、eval)
var a =10; // 全局
(function(){ //函数
var b = 20;
})();
a;
/*
10
*/
b;
/*
Exception: ReferenceError: b is not defined
@Scratchpad/1:9:1
*/
for(var item in{a:1,b:2}){
console.log(item);
}
console.log(item);
eval("var a=1;");
//js 没有块级作用域 也就是说 for 还有if之类的声明都是全局性的
//作用域链
function outer2(){
var local2 =1;
function outer1(){
var local1 = 1;
//这里可以范根到 局部变量local1,local2,和全局变量global3
}
outer1();
}
var global3= 1;
outer2();
//内部可以访问外部的变量
//利用函数作用域封装
(function(){//匿名函数
//do sth
var a,b;//声明局部变量
})();
!function(){ //声明函数表达式
//do sth
var a,b;
}();
//ES3执行上下文Exec、变量对象(抽象概念)
/*vo按照如下顺序填充
1、函数参数(若为传入,初始化改参数值为undefined)
2、函数声明(若发生命名冲突,会覆盖)
3、变量声明(初始化变量值为undefined,若发生命名冲突,会忽略)
*/
function foo(x,y,x){
function x(){
alert(x);
}
}
foo(100);
//console.log 使用第二条判断
function foo(x,y,z){
function func(){};
var func =1;
console.log(func);
};
foo(100);
console.log(foo(100));//结果都是1 使用第三条判断
//函数表达式不会影响VO
var e=function _e(){};
//这样就可以解释 为什么变量跟 函数可以前置;而 函数表达式不可以 会报错
//函数声明 名字不可以省略 执行提前
alert(x);//function
var x=10;
alert(x);//x=10;
x=20;
function x(){};
alert(x);//20
if(true){
var a=1;
}else{
var b=true;
}
alert(a);//1
alert(b);//undefined
Js作用域、上下文
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些。 如上图,我们在上文中已经介绍了,...
- 今天为了搞清楚上下文(context)这个词的概念,搜索了一番,根据网上的各种说法,个人理解context可以指中...
- 参考:http://www.jianshu.com/p/181da2b57eb2http://www.jiansh...
- setTimeout会把回调放到代码执行完毕后,再做处理,so 所以就不难理解为什么第一张图会打印5个5了,因为不...
- 原文地址:深入理解闭包(五)——作用域、作用域链和执行上下文 作用域,作用域链,执行上下文三者之间有着密切的关系,...