- 除了函数外,js是没有块级作用域的
- 作用域链:内部可以访问外部的变量,但是外部不能访问内部的变量
注意:如果内部有,优先查找内部,如果内部没有就查找外部的
- 注意声明变量是用var还是没有写(window.)作用域是不一样的
- 注意:js有变量提升的机制【变量悬挂声明】
function fun() {
var a = 10
function foo() {
console.log(a); // 输出 10
}
}
fun();
function fun2() {
var a = 10
function foo() {
var a = 20
console.log(a); // 输出 20
}
}
fun2();
// 自执行函数
(() => {
var a = b = 10;
})()
console.log(b); // 输出 10,b没有声明相当于全局变量,b相当于window.b
做题时注意看:
-
本层作用域有没有此变量【注意变量提升】
-
注意:js除了函数外没有块级作用域
// 考题一:
function c() {
var b = 1;
function a() {
console.log(b); // undefined,有 变量提升了
var b = 2;
console.log(b); // 2
}
a();
console.log(b); // 1
}
c();
// 考题二
var name = 'a';
(function() {// 本层已经定义了name,相当于在这里声明了name即 var name;
if(typeof name == 'undefined') {
var name = 'b';
console.log('111' + name);
} else {
console.log('222' + name);
}
})()
输出:111b