JS之全局变量与局部变量常见面试题

1.示例1:

   function f(a){

            a = a+1;

            alert(a)

        }

        var a =1;

        f(a);

        alert(a)

依次输出 2,1

解析:函数外的a是全局变量,函数f中的a是参数a,而不是全局定义里的a,JavaScript中作用域是函数级别的,在f中不管怎么改变参数a,都不会影响全局变量a。

函数的形参和全局变量重名;既然参数也是局部变量,那函数内部对于a的操作都指向局部变量a影响不了全局变量a,

2.示例2

 function f(a){

           a[0]=a[0]+1;

           alert(a[0])

       }

       var a =[1,2];

       f(a);

       alert(a[0])

依次输出 2,2

示例3:

var f = true;

if (f === true) {

  var a = 10;

}:

function fn() {

  var b = 20;

 c = 30}

fn();

console.log(a);

console.log(b);

console.log(c);

依次输出:10 ,报错 ,30

解析:function内的新声明的变量才是局部变量,而 没有用var声明的变量在哪里都是全局变量。再次提醒切记只有function(){}内新声明的才能是局部变量,while{…}、if{…}、 for(..) 之内的都是全局变量(除非本身包含在function内)。

4.var 和函数的提前声明

function fn(a) {

  console.log(a);

  var a = 2;

  function a() {}

  console.log(a);

}

fn(1);

依次输出 function a(){console.log(a)},2

解析:var和function是会提前声明的,但是function是优先于var声明的(如果同时存在的话),所以提前声明后输出的a是个function,然后代码往下执行a进行重新赋值了,故第二次输出是2。

5.

var a = 10;

function test() {

            var b = 100;
            console.log(a);//打印结果是10
            a=100;
}
test();
console.log(a); //打印结果为100
console.log(b);//报错 b is not defind

依次输出:10,100,报错b is undefind

说明: 因为a 是全局变量所以在函数内部可以被访问且被赋值;第一次打印结果为10;

            执行函数后a的值变为100 ;

            b是局部变量;在函数外部被打印,访问不到b的值 所以报错;

 

(1).如果局部变量和全局变量的变量名相同的情况;

var a = 10;

        function test() {

            console.log(a);//打印结果为undefind
            var a = 100;
            console.log(a);//打印结果为100

        }
        test();

console.log(a);//打印结果为10

依次输出: undefined,100,10

说明:1.如果局部变量的变量名和全局变量名形同,在函数内部变量值全部指向局部变量;

          2.第5行结果为undefind;因为只要局部变量a被声明,a就指向局部变量,但是打印在赋值之前,结果为undefind;

第二次打印结果在赋值之后 为100;要想改变全局变量a 的值,可以用window.a ;

          3.第三次打印在函数外边,所以打印全局变量a,值为10;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值