var abc = '123'; // 全局变量 具有全局作用域 c = '222'; // 实际上 是 window.c = '222' 的简写。 function test() { var abcd = 1234; // 函数作用域 if(abcd > 1) { let a = 2; // 块级作用域 let 和 const 定义的变量才具有块级作用域。 var b = 3; // 属于函数作用域 } console.log(this.c) console.log(abc); // 123 js会先在当前作用域找是否有abc这个变量,如果没有就会往上面一层找。这就是作用域链。 console.log(b); // 3 console.log(a); // undefind } test() // 此时console.log(this.c)输出为222 test.bind({c: 200})() // 此时console.log(this.c)输出的是200, 所以this的作用域为动态作用域