全局作用域
作用范围:在全局能够访问到的全局变量
代码实例:
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); //1
a = 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 })()
备注立即作用域有点像块级作用域。