变量的作用域
-
全局作用域:在全局作用域下声明的变量可以在任意位置访问到
-
函数(局部)作用域:函数作用域下声明的变量只能在函数内部访问
注意:在函数内部使用var关键字声明的变量是局部变量,不使用var声明的变量是全局变量。 -
变量声明提升
js程序执行之前,使用var声明的变量会提升到所在作用域的最前面,但赋值还在原来的位置
函数的作用域
- 全局作用域:在全局作用域下创建的函数可以在任意位置调用
- 函数(局部)作用域:在函数作用域下创建的函数只能在函数内部调用
- 函数声明提升:js在程序执行之前会把function声明的函数提升到最前面
- 函数提升的优先级高于变量提升
var a = 1; //全局变量
function fn(){
//var a 局部变量undefined
var a=a+3;
console.log(a); // NaN
}
fn();
console.log(a); //1
var a=1;
function fn(b){
//参数相当于声明一个局部变量b: var b
b=2; //var b=2;
console.log(a); //1 在函数内部可以访问全局变量
console.log(b); //2
}
fn();
console.log(a);//1
console.log(b); b is not defined //在全局不能访问局部(函数)变量
var a=1;
function fn(a){
//参数a相当于局部变量
a=2;
}
fn();
console.log(a);//1
var a=1;
function fn(){
//函数内部未使用var声明的变量是全局变量
a=2;
}
fn();
console.log(a);//2
function fun(){
consoole.log(1);
}
function fn(){
fun();// 1在函数内部可以调用全局函数
console.log(2); //2
}
fn();
function fun(){
//在函数内部可以创建局部函数
function fn(){
console.log(1);
}
fn();
}
fun();