听完作用域链和预解析之后有点懵

听完作用域链和预解析之后有点懵

1
2
3
4
5
6
7
8
var a=1;
    function fn(){
      console.log(a);
      var a=2;
               
    }
fn();
console.log(a);

比如这段代码是打印出的是underfined和1

1
2
3
4
5
6
7
8
var a=1;
    function fn(){
       
      var a=2;
       console.log(a);      
    }
fn();
console.log(a);

那吧打印a放在下面的话 按照作用域链怎么理解

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
小王子抓猫咪 2017-07-18 15:54:22

你的问题很明显,就是对JS的预解析机制很不理解。建议你先好好看书,再来把老师的栗子好好理解理解。道理不明白,做再多的题都是错的。

小王子抓猫咪 2017-07-18 15:48:36

你需要好好看Js书籍,建议你看JS高级程序设计(红皮书)

怎么都被占用了呢 2017-06-19 14:42:26

一旦在函数内部使用var声明了局部变量,在函数内部,变量声明前都是访问不到该变量的。

  • 提问者 从何说起_ #1
    第一个函数 视频里讲的是按照预解析的方式var声明了这个变量 就相当于赋值给了underfined 所以打印的是underfined 那我也可以理解成在函数内部 用var声明了局部变量 在声明之前都是访问不到的对吧
    2017-06-19 18:53:21
  • 提问者 从何说起_ #2
    还想问一下var a=1; function fn(){ console.log(a); a=2; } fn(); console.log(a);这个怎么理解一下 谢谢
    2017-06-19 18:54:26
  • 樱桃小胖子 回复 提问者 从何说起_ #3
    var和function是会提前声明的,而且function是优先于var声明的(如果同时存在的话),所以提前声明后输出的a是个function,然后代码往下执行a进行重新赋值了,希望可以帮到你!
    2017-06-20 21:40:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码