作用域:一个变量的可见区域
全局作用域
生命周期:在网页生成时创建,关闭时销毁。
所有的直接写在script标签中的代码都是全局作用域 可以在任意位置访问
局部作用域
块作用域
生命周期: 在代码块执行时创建,在代码块结束时销毁
在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问
函数作用域
生命周期:在函数调用时产生,结束时销毁
函数调用会产生一个全新的函数作用域,只能在内部访问,外部无法访问
作用域链
当使用一个变量时,js引擎会在当前作用域中寻找
如果找到,就使用
如果没找到,去上一个作用域找,
找到了,就使用
没找到,继续上一层找
直到全局作用域,如果也没有找到,则报错
window对象
通过window对象 可以对浏览器窗口进行各种操作
window对象负责存储js中的内置对象及浏览器的宿主对象
window对象的属性可以通过window对象访问,也可以直接访问
var 和 let
- var声明的变量,会作为window对象的属性来保存,是一个全局变量
- 使用function声明的函数,也会作为window对象的方法保存
- 使用let声明变量 不会存到window对象中,存在秘密的地方,增加了变量的安全性
this
- 函数执行时,js会传递一个隐形的参数this
- 普通声明函数,谁调用 this就指向谁
** 箭头函数this **
- 没有自己的this 由外层作用域来决定
- 在哪里定义,就指向谁 ,跟谁调用无关