目标

  • 能够说出Javascript的两种作用域
  • 能够区分全局变量和局部变量
  • 能够说出如何在作用域链中查找变量的值

1. 作用域

1.1 JavaScript作用域:

使代码(变量) 在某个范围内起效果和作用,目的是提高程序可靠性和减少命名冲突

  1. 全局作用域

var num=1;
在整个script标签中生效,或是js文件中;

  1. 全局变量

var num=1;
在全局作用域下声明的变量叫做全局变量

  • 可以在全局下任意使用;
  • 没有声明直接赋值的变量也属于全局变量

function fn () {
num=1;
};

  1. 局部作用域
  2. 只在函数中生效,无法单独调用, 定义函数的形参也算是局部变量;

function fn (one) {
var num=1;
};

  1. 局部变量

在局部作用域下声明的变量叫局部变量, 或在函数内部定义的变量;

  • 只能在函数内部调用

代码同上

总结: 从执行效果来看全局和局部

  1. 全局变量只有在浏览器关闭的时候才销毁
  2. 局部变量当程序执行完毕之后就会销毁

2. 作用域链

内部函数访问外部函数的变量, 采取的是链式查找的方式来决定取哪个值, 这种结构称之为: 作用域链, 理解: 就近原则查找

  1. function f1() {
  2. var num = 123 ;
  3. function f2() {
  4. console.log(num);
  5. }
  6. f2();
  7. }
  8. var num = 456 ;
  9. f1();//就近原则查找