基本概念
js引擎 编译器 作用域
变量赋值操作
1.编译器会在当前作用域生命一个变量,如果以前没有声明过
2.js引擎会在作用域查找该变量,找到对他进行赋值
3.查找变量的目的是进行赋值的话,就会使用LHS查询
4.查找变量的目的是获取比变量的值的话,就会使用RHS查询
词法作用域(定义词法阶段的作用域)
1.由变量或者函数声明时的位置决定
2.欺骗词法作用域
eval("var a = 123") 动态执行代码 造成性能损失较大 修改作用域
with() 创建新的作用域
函数作用域(属于函数的变量都可以在整个函数的范围内使用及复用)
1.如果函数不需要函数名或者函数名不污染所在作用域,并能自动执行,函数立即表达式
2.函数表达式和函数声明的区别
函数声明 函数名被绑定在所在的作用域中,直接通过函数名来调用
函数表达式 函数名隐藏在自身中,只能在函数内部访问,外部作用域不行
3.匿名与具名 函数声明必须是具名 函数表达式可以是匿名 但是具名
4.IIFE 函数立即表达式
形式
1.(function(){})() ==(function(){}())//两种形式等价
2.可以将函数当做参数传进去
作用
通过闭包实现数据的封装
const counter = (function() {
let value = 1;
return {
set(val) {
value = val;
},
get() {
return value;
}
}
})()
变量重命名
解决名明明冲突
window.$ = function(){}
(function($){})()
捕获全局对象
(function(global){})(this)
块作用域 {}
1.let 将变量隐士的绑定在所在的任意作用域中{} 不存在变量提升
2.快作用域指的是变量和函数不仅属于所处的作用域,也可以属于某个代码块