this 代表上下文,
- 在哪调用的函数,this就指向哪里,
- 箭头函数指向 调用者的父函数,
- 严格模式和非严格模式
- 全局变量/局部变量
- 显示声明/隐士声明
- 变量提升
- 作用域
这几个指标是相互关联的,
作用域
在es5的时候
全局作用域 === 函数作用域;
像 if,for,while swich 等循环判断的代码块,是没有自己的作用域的
在for(var i;) 其中的 i 会进行变量的提升 到全局作用域
在es6 加入了 let 关键字, 块状作用域 可以在代码块中声明自己的作用域;
引出一个问题 在函数作用域/块状作用域中没有显示声明的变量 是什么形式的 var/let
函数作用域内 使用的 var 块作用域使用 let 来隐士的声明变量;
代码分析
// 外部变量使用let来声明
let a = 0
if(true){
console.log("内部",a) a(){}
a = 1;
console.log("内部",a) 1
function a(){};
a = 21;
console.log("内部",a) 21
}
console.log("外部",a) 0
//外部使用var 来声明变量
var a = 0
if(true){
console.log("内部",a) a(){}
a = 1;
console.log("内部",a)
function a(){};
a = 21;
console.log("内部",a)
}
console.log("外部",a)