1、函数内直接调用全局变量
var a = 1;
function test(){
a = 100; // 函数内直接调用全局变量
console.log(a)
}
我们运行函数,然后再回头来看全局变量的值
test() // 100
a // 100
比较简单,函数内,因为没有var a,所以此处的a是全局变量的重新赋值,最终全局变量a被重新赋值为100了
2、函数通过参数的形式(传值)将全局变量引入函数内
var a = 1;
function test(a){
a = 100;
console.log(a)
}
现在,我们给函数一个形参,然后调用的时候将全局变量a以实参传入函数内,我们再次执行函数
test(a) // 100
a // 1
我们发现,当以参数的形式传入a的时候,函数体内不在是对全局变量的修改了,因为当我们给函数传参的时候,相当于定义了一个新的变量a,函数体内a成为了一个新的变量
3、函数通过参数的形式(传址)将全局变量引入函数内
var obj = {num: 0}
function test(obj){
obj.num++;
console.log(obj)
}
我们将对象obj以参数形式传入函数内部,再次执行函数,我们看一下
test(obj) // {num: 1}
obj // {num: 1}
全局的obj也同时发生了改变,虽然我们也是通过参数形式,相当于函数体内有一个var obj,但是注意,这里传入的参数为对象形式,是引用类型,传址,会指向和全局变量obj同样的值,所以会同时改变全局变量的值