有形参,函数内部变量定不定义var都是局部变量,如果没定义,但是赋值了,就会在内部声明前置。
如下:
var a = 3;
function sum(a) {//有形参
//a赋值了,所以该位置会加个声明前置:var a;
var b = 2, c = 4;
d = b + c;
console.log("d1=" + d);//d1=6
a = 9;//因为有形参,所以此处a是局部变量
console.log(a);//9
}
sum(a);
console.log(a);//3
console.log("d2=" + d);//d2=6
解读:因为设置了形参且a赋的有值,所以函数内部的a在函数内部作用域设置声明前置,此时a = 9;是局部变量,可以被函数内部访问,不可以被外部访问。
无形参,函数内部变量定义了var就是局部变量,未定义var就是全局变量。
如下:
var a = 3;
//该处设置声明前置:var d;
function sum() {
var b = 2, c = 4;
d = b + c;//d在函数内部未找到局部变量d,转去外部找全局变量d,未找到,但是因为赋值了,所以在外部设置声明前置
console.log("d1=" + d);//d1=6
a = 9;//函数内部没有局部变量a,所以是全局变量
console.log(a);//9
}
sum();
console.log(a);//9
console.log("d2=" + d);//d2=6
解读:由于没有设置形参,所以d在外部设置声明前置,此时为全局变量,a = 9;此时为全局变量。