作用域
作用域
- 作用域指一个变量的作用范围
- 在JS中共有2种作用域
- 全局作用域
- 函数作用域
全局作用域
- 直接编写在script标签中的JS代码,都在全局作用域。
- 全局作用域在页面打开时创建,在页面关闭时销毁。
- 在全局作用域中有一个全局对象window,它代表浏览器的窗口,由浏览器创建,我们可以直接使用。
- 在全局作用域中:
- 创建的变量都会作为window对象的属性保存。
- 创建的函数都会作为window对象的方法保存。
- 全局作用域中的变量都是全局变量,在页面的任意位置都可以访问。
变量的声明提前
- 使用
var
关键字声明的对象,会在所有的代码执行之前被声明,但是不会赋值。 - 如果声明变量时不适用var关键字,则变不会被声明提前,当顺序执行至声明语句时才被声明。
console.log(a); var a = 123; // 结果是:undefined
console.log(a); a = 123; //结果是:报错
函数的声明提前
- 使用函数声明形式创建的函数
function 函数(){};
,会在所有代码执行之前就被创建,因此可以在函数声明钱调用函数。 - 使用函数表达式创建的函数,不会被提前声明,因此不能再声明前调用。
fun1();
// 函数声明,会被提前创建
function fun1(){
console.log("我是函数声明创建的函数");
}
// 结果是:我是函数声明创建的函数
fun2();
// 函数表达式,不会被提前
var fun2 = function(){
console.log("我是函数表达式创建的函数");
}
// 结果是:undefined is not a function.
// 一个未定义的对象被赋值给了变量fun2
函数作用域
- 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁。
- 每调用一次函数就会创建一个新的函数作用域,它们之间是互相独立的。
- 在函数作用域中可以访问到全局作用域的变量。
- 在全局作用域中无法访问到函数作用域的变量。
- 在函数作用域中操作一个变量时,它会现在自身作用域中寻找该变量,如果有则直接使用,如果没有则向上一级作用域中寻找。
- 在函数中若要访问全局变量可以使用
window
对象。 在函数中,不使用var
声明的变量都会成为全局变量。
// 创建一个全局变量
var a = 10;
function test(){
// 创建一个函数内的变量
var a = "我是函数中的变量a~~~";
var b = 20;
console.log("a=" + a); // a=10
console.log(a); // 我是函数中的变量a~~~
}
console.log("b=" + b); // b is not defined.
console.log(a); // 10
var a = 22;
function fun(){
console.log(a); // undefined
var a = 11;
}
console.log(a); // 22
var a = 22;
function fun(){
console.log(a); // 22
a = 11; // 此处成为全局变量操作
}
console.log(a); // 11
如发现错误请联系我,谢谢你。
本文链接:http://ninefire.tk/JavaScript.basics/11.html