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

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

var a=1;
	function fn(){
	  console.log(a);
	  var a=2;
	          
	}
fn();
console.log(a);

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

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 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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