javascript 局部变量和全局变量的问题

2025-02-27 12:03:13
推荐回答(3个)
回答1:

这个怎么说呢,有点复杂

在uc方法中,有一个a="2",如果只有这个的话,没有后面的var a="3",那么这个a,就是全局变量了。

你不妨把var a="3"释掉试试,看是不是这个情况?

可是你在这个方法里,却出现了对a这个变量的var声明,那么在这个方法里,a就是正宗的局部变量,而非外面的全局变量了。

因为在一个作用函数域里,JS是会先寻找function这样的函数定义,先寻找var变量声明,然后再去一步步执行JS赋值、运算等程序步骤的。

比较如下面的程序:

a = 3;

var a;

那么,程序会先把a声明了,然后再去给它赋值3

所以,你的例程看似简单,却包含有两处JS的特性:

1. JS在运行程序前,会寻找变量声明,并决定其作用域;

2. JS的局部变量和全局变量;

-----------

你那么有钱(财富值),怎么不多给点??!

回答2:

  这个有什么复杂的,只能说是对词法分析、作用域不熟悉罢了

  javascript的词法作用域:函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是在函数调用时决定的,也叫静态作用域 ,也就是说词法作用域取决于源码,通过静态分析就能确定

  明白了么,也就是说,dc函数执行时a打印值是根据定义时决定的,也就是全局范围内,a的值为1,不信,楼主可以把1改为3,打印的绝对是3.4

回答3:

我测试了一下应该是这样的
你的全局想要a = 1 a= 2
但是实际效果是 当执行到a= 2 的时候下面有个局部变量a=3把 变量a=2替换了 当执行dc()的时候取得的值a 仅仅是最外层的全局变量a=1 所以怎么也得不到a=2 如果你想 a=2 那么就把局部变量a=3 换值