JavaScript:var、let、作用域

在ES5中变量只有两个作用域:全局作用域和局部作用域(函数作用域),均用var定义。

局部作用域(函数作用域):变量在函数内部生成,只能在函数内部调用。

全局作用域:网页中所有脚本和函数均可使用

ES6新增块级作用域:let 定义

  块级作用域:{}内

下面例子中,在f()函数外部定义了全局变量tmp,在函数f()里定义了局部变量tmp。

函数内的变量在函数调用的时候生成,在函数调用结束的时候销毁。此处使用了变量提升,即变量先使用,后定义。调用f(),打印的tmp值 为undefined。

函数调用完后,再打印的tmp值应该为 全局变量 tmp的值 即 jjjj。

1 var tmp ="jjjj";
2 console.log("tmp1:"+tmp);
3 function f() {
4   console.log("tmp2:"+tmp);
5   var tmp = 'hello world';//局部变量    
6 }
7 f();
8 console.log("tmp3:"+tmp);

 去掉标黄色的,var。函数内部使用的是全局变量tmp。

调用f(),打印的tmp值 为全局变量tmp的 jjjj。函数中将tmp的值 改为hello world ,

函数调用完后,再打印的tmp值应该为 改变后的 hello world。

再将函数里的tmp前加上let 。控制台会报错。因为let不存在变量提升,即let 不能先使用后定义。

 将上图f()函数内的两条语句交换位置。函数内部打印的是,内部改变的 hello world。函数结束后,仍然是 jjjj。 let只在块级作用域内有效。即{只在所在的花括号内有效},不局限于函数内部。可以在任何地方的花括号定义的块级作用域内。

原文地址:https://www.cnblogs.com/weimengjiacan/p/13554830.html