对于一些作用域自己的理解,望能帮助某人

(function(){
aa();
f2();
var f1 = function aa(){};
function f2(){
alert(1);
}
})();

// 按照代码的执行顺序从上往下而言,在执行到未定义函数时报错 aa()未定义( aa is not defined )报错后就此就会中断,后面代码不在执行
//var f1,function f2(){}; //hoisting,被隐式提升的声明
// 上面代码中函数声明f2被提升,所以在前面调用f2是没问题的。虽然变量f1也被提升,但f1提升后的值为undefined,其真正的初始值是在执行到函数表达式处被赋予的。所以只有声明是被提升的。

 

// var a = 1;
// function outer(){
// var b = 2;
// function inner(){
// var c = 4;
// console.log(a);
// }
// inner(); //调用inner函数
// }
// outer(); //调用rainman函数

//JavaScript的作用域链
//观察alert(a);这句代码。JavaScript首先在inner函数中查找是否定义了变量a,如果定义了则使用inner函数中的a变量;如果inner函数中没有定义a变量,JavaScript则会继续在onter函数中查找是否定义了a变量,在这段代码中outer函数体内没有定义a变量,则JavaScript引擎会继续向上(全局对象)查找是否定义了a;在全局对象中我们定义了a = 1,因此最终结果会弹出'1'。

//作用域链:JavaScript需要查询一个变量x时,首先会查找作用域链的第一个对象,如果以第一个对象没有定义x变量,JavaScript会继续查找有没有定义x变量,如果第二个对象没有定义则会继续查找,以此类推。

//上面的代码涉及到了三个作用域链对象,依次是:inner、outer、window。

转载于:https://www.cnblogs.com/lrbee/p/6011550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值