Js作用域、上下文

//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











最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容