全局作用域
作用范围:在全局能够访问到的全局变量
代码实例:
var num = 10;function fn1() {console.log(num, "全局作用域");}fn1()
打印的结果:
函数作用域
作用范围:只在函数里面能够进行访问
代码实例:
function fn1() {var num = 10;}console.log(num);
打印的结果:
可以看到的是结果报错了
块级作用域
作用范围:es6新增的使用 let 和const 在{}定义的变量只能在当前的括号里面进行访问
代码实例:
1.使用var进行定义的
for (var i = 0; i <= 5; i++) {}console.log(i);
打印的结果:
2.使用let进行定于的
for (let i = 0; i <= 5; i++) {}console.log(i);
打印的结果:
可以看出let是有块级作用域的而var没有。
作用域练习题
习题1
var name = "xm";function fn() {name = "xh";console.log(name); //'xh'}fn();console.log(name); 'xh'
习题2
var name = "xm";function fn() {console.log(name);("xm");name = "xh";}fn();console.log(name);("xh");
习题3
var a = 1;function fn(b) {console.log(a); //1a = 3; }fn();console.log(a); //3
习题4
var a = 10;(function () {console.log(a);a = 5;console.log(window.a);var a = 20;console.log(a);})();
执行解析步骤: var a = undefined; a = 10; (function () { // 变量提升(预解析) var a = undefined; console.log(a); // 输出undefined a = 5; console.log(window.a); // 找window(全局)对象的a, 输出10 a = 20; console.log(a); // 输出20 })()
备注立即作用域有点像块级作用域。