JavaScript
作用域
作用域,就是根据名称查找变量的规则。
词法作用域/静态作用域词法作用域
定义在词法阶段的作用域,词法作用域就是你写代码的时候,将变量写在哪里决定的因此,当词法分析器处理代码时会保持作用域不变。(eval,with)
函数作用域函数作用域
属于这个函数的全部变量,都可以在整个函数内使用,
上下文
词法作用域,是在写代码的时候,或者在定义时,确定的;而动态作用域,是在运行时确定。[高阶函数]
闭包
函数嵌套函数时,内层函数引用了外层函数作用域下的变量,并且内层函数在全局环境下可访问,就形成了闭包。
闭包可用于保存执行环境
使用场景
- 缓存计算结果
- 创建私有变量
this
this 的指向,是根据上下文,动态决定的。
- 在简单调用时,this 默认指向的是window/global/undefined (浏览器/node/严格模式)
- 对象调用时,绑定在对象上;
- 使用 cal.apply.bind 时,绑定在指定的参数上;
- 使用 new 关键字是,绑定到新创建的对象上;
(以上三条优先级:new>apply/call/bind>对象调用)使用箭头函数,根据外层的规则决定。