函数的作用域和预解析问题

一、函数的作用域的访问规则是向上查找的:

1.如果这个函数在函数体内已经有变量的声明了,那么它就不会去外面查找。

比如

  var a=10;

function abc()

{

  console.log(a);

  var a=20;

}

abc();

上面这个函数输出是undefined。因为在函数内它自己有声明了,父函数那个声明就不会去用了。

2.如果这个函数在函数体内没有声明变量,那么它就会去父亲函数里面找,如果父亲函数里有声明变量,那么就直接拿过来用,如果没有,就会去全局变量中查找。

3.如果函数想要直接修改这个变量,但是这个变量又没有在这个函数体内有声明,那么就会去父亲函数里面找,如果父亲函数里面有声明,就会直接修改父亲函数声明的那个变量的值。

二、预解析

1.函数在声明变量的时候,会把变量的声明提前到作用域前(先声明不赋值),赋值语句还留在原地。

2.函数声明的时候,会把函数的声明代码提前到作用域的最顶端。

abc();

console.log(a);

console.log(b);

console.log(c);

function abc()

{

  console.log(a);

  var a=b=c=10;

}

上面的结果

首先是函数的代码会提前到作用域前,那么会被放到javascript标签内,所以预解析之后的代码:

function abc()

{

  console.log(a);

  var a=b=c=10;//这里等价与 b=10;c=10;var a=10;所以b和c是全局变量,a是局部变量

}

abc();

console.log(a);

console.log(b);

console.log(c);

 

转载于:https://www.cnblogs.com/gdfyh/p/6758307.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值