JS作用域之let和var

由于之前C和JAVA相关语言的学习,对于JS的作用域比较接收,但中间有一个注意点:

JS中没有块级作用域,只有全局作用域和函数作用域;对于没有块级作用域,比如:

  这里的i就是for中定义的i,如果在函数外,那么就是全局变量了,页面关闭才会销毁。

对于全局作用域和函数作用域:只用记住子域可以访问父域,而父域不能访问子域。

需要注意let关键字:

let定义的变量让其产生了块级作用域。具体效果如下:

可以看到,在for循环外部,i为undefined状态

扫描二维码关注公众号,回复: 5428542 查看本文章

变量提升

函数声明和变量声明会被解释器“提升”到方法体的最顶部;

而对于变量的初始化并不会提升,例如:

let不会出现变量提升的问题,如图:

可以发现,由于var有提升,所以默认var a;这一条语句解释器会将它放在最上面,只会出现undefined的提示,而let没有提升,所以,会直接报错。

再举几个例子:

可以发现,假如fun中如果没有var b的话,那么两次输出都是没问题的,但由于fun中的b出现了提升,导致第一次的输出出现undefined。

这种写法是不对的,记住:如果区块内中存在let或const,那么外部无法访问区块内的let和const变量,该区块对于外部同名的变量也不能访问。暂时性死区(封闭的区域)

猜你喜欢

转载自blog.csdn.net/sinat_28839863/article/details/88180782
今日推荐