JavaScript的作用域,作用域链,变量

JavaScript的作用域是指变量的作用范围,内部作用域由函数的形参,实参,局部变量,函数构成。

内部作用域和外部的作用域一层层的链接起来形成作用域链

当在函数内部要访问一个变量的时候,首先要查找自己的内部作用域有没有这个变量,如果没有就到这个对象的原型对象中去查看,还是没用的话,就到该作用域所在的作用域中找,直到到Window所在的作用域,每个函数在声明的时候就默认有一个外部作用域的存在了,例如:

    var t = 4;
    function foo() {
        var tem = 12;
        function bar() {
            var temo = 34;
            console.log(t + " " + tem + " " + temo);
        }
        return bar();
    }
    foo();
    //输出的结果:4 12 34


JavaScript变量提升

var bar=1;
function test(){
  console.log(bar);     //undeifned
  var bar=2; 
  console.log(bar);  //2
}
test();
为什么在test函数中会出现上述结果呢,这就是JavaScript的变量提升了,虽然变量bar的定义在后面,不过浏览器在解析的时候,会把变量的定义放到最前面,上面的test函数相当于

function test(){
  var bar;
  console.log(bar);   //undefined
  bar=2; 
  console.log(bar);   //2
}
再看
var foo=function(){  console.log(1); }
function foo(){  console.log(2); }
foo();  //结果为1
//同样的,函数的定义也会到提升到最前面,上面的代码相当于
function foo(){  console.log(2); }
var foo;
foo=funciton(){ console.log(1); }
foo();   //1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值