Understanding Global & Local Scope in Javascript
我一直在使用Stoyan Stefanov的面向对象的JavaScript学习JavaScript
他提供了一个比较全球和本地范围的例子:
1 2 3 4 5 6 7 | var a = 123; function f() { alert(a); var a = 1; alert(a); } f(); |
看这个例子,我期望第一个警报是"123",第二个警报是"1"。你看,斯托扬说:
You might expect that the first alert() will display 123 (the value of
the global variable a) and the second will display 1 (the local a).
This is not the case. The first alert will show"undefined". This is
because inside the function the local scope is more important than the
global scope. So a local variable overwrites any global variable with
the same name. At the time of the first alert() a was not yet defined
(hence the value undefined) but it still existed in the local space.
解释不清楚,本地变量如何覆盖第一个警报中的全局变量?如有任何其他/不同的解释,我们将不胜感激。
它不重写全局变量。所发生的事情被称为"可变吊装"。也就是说,在函数的顶部插入一个
脚本引擎将脚本更改为以下内容:
1 2 3 4 5 6 7 8 | var a = 123; function f() { var a; alert(a); a = 1; alert(a); } f(); |
要学习的一课:在使用变量之前一定要声明它们。有些人会说在函数顶部声明所有变量。
简单来说,首先考虑变量和函数的所有声明。因此,实际中的局部
另一个使用函数显示其工作原理的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function show(){ alert("I am global"); } function f() { show(); show = function(){ alert("I am second"); } show(); function show(){ alert("I am first"); } } f(); show(); |