JS笔记4:作用域与声明提升
全局作用域中有一个全局对象 window,代表一个浏览器的窗口,由浏览器创建。在全局作用域中声明变量实际是为 window 对象添加属性。因此可把全局作用域理解为特殊的最大的函数作用域。
1
2
3
4console.log(a); // 由于 a 未定义,报错
console.log(window.a); // undefined
let a = 1;
console.log(window.a); // 1var 关键字定义的函数及变量的声明都将被提升到函数的最顶部,而使用函数声明形式创建的函数会在所有代码执行之前被创建。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17f1(); // x= 5, f= function (){}
console.log("x= " + x); // x = undefined
console.log("f= " + f); // f = undefined
x = 5;
f = function (){};
console.log("x= " + x); // x = 5
console.log("f= " + f); // f = function (){}
var x, f;
function f1() { // 在所有代码执行之前被创建
console.log("x= " + x + ",f= " + f);
};
f2(); // undefined
function f2() {
console.log(a);
var a = 2;
}函数内使用未声明的变量即为上一层的的变量
1 | var a = 1; |
- 在每次函数调用时都会将 this 作为一个隐含的参数传入,this 指向函数执行的上下文对象
1 | var name = "Lisi"; |