函数的作用域
什么是函数:作用域就是变量或函数的可访问范围。它控制着变量或函数的可见性和生命周期。
在js中,函数的作用域分为:
-
全局变量:在函数外声明;声明变量时没有使用var
-
局部变量:在函数内声明的变量(包含参数位置)
实例1: (全局变量与局部变量的应用)
var a=10;//全局变量
function show(){
var a=100;//局部变量
console.log(a);//100
}
show();
console.log(a);//输出10
实例2:局部变量只能在当前函数内访问到,离开此范围无法访问。
function add(){
var sum=1+2;//局部变量
console.log(sum);//输出3
}
console.log(sum);//脚本错误
function show(a) {
console.log(a); //局部变量
}
show(10);
console.log(a); //局部变量 ,所以报错
实例3:全局变量,在代码任何地方都可以访问。
var sun-0;
function add(){
sum=1+2;
console.log(sum);
}
console.log(sum);//全局变量在函数外也可以调用
var a = 10;//全局变量
function show() {
a = 20;//全局变量,把20赋值给a
console.log(a); //20
}
show();
console.log(a); //20
声明提前(变量提升)
js在正式执行之前,会将所有var声明的变量和fuction声明的函数,预读到所在作用域的顶部。但是,对变量的赋值还保留在原来的位置。
例1:
console.log(a);//不会报错,但输出undefind
var a=100;
console.log(a);//输出100
if(true){
var a=10;
console.log(a);//输出10
console.log(b);//不会报错,undefined
}else {
var b=20;
}
按值传递
传递时,实际是将实际参数复制一份副本传给了函数。在函数体内对变量进行修改。
实际上谁不会影响到外部的实参的变量。
var n=100;//全局变量
function fun(n){//参数变量也是局部变量
n-=3;//修改的是局部变量
console.log(n);//输出的是局部变量n;
}
fun(n);//按值传递,方法内传输97
console.log(n);//输出全局变量100
总结:
建议优先使用局部变量。
因为全局变量生命周期更长(和页面的生命周期一样),占用内存时间较长;
局部变量使用完毕就可以等待回收,更加合理。