- 在当前作用域中声明的变量,会将变量提升到作用域顶部。
- 声明提升 值不提升 【undefined】
- 在当前域使用变量时,看当前使用时变量是否赋值
例子
var v = 'hello';
function fun(){
console.log(v); // 使用变量v 当前处于 已定义 为赋值
var a = 'world'
// return 23;
}
fun() //undefined
// console.log(a); //报错 a is not define
// 变量未定义: xxx is not define
// undefined 表示变量已经定义 在执行当前【使用变量】时,处于【未赋值】状态
// 因为变量a已经声明 所以变量声明会提升到作用域顶部
// 又因为 当前使用变量a没有赋值
// 所以打印出 undefined 没有赋值
// console.log(a);
var a;
var c = fun
console.log(c); //这个时候输出的是fun函数
var d = fun();
console.log(d); //undefined
//这个时候返回undefined 因为函数没有返回值 相当于变量没有被赋值
// 或者我的理解就是 函数没有返回值 为undefined 将undefined赋给d 所以返回undefined
- 注意:if 语句 和for循环中的变量也是全局的 只有函数体中的是局部的,没有var 的变量是全局的
- 在函数中没有var变量的时候那个变量是全局的
变量的使用规则:
1:先在自己的作用域中找 ——>有直接使用 无看2
2:再去父域中找 ----> 有 使用 无看3
3:继续往上层域中找,直到全局域位置 —> 有 用 无 报错 — xxx is not define
变量查找方式:- 1:先看声明,再看赋值,赋值使用就近原则