How the below JavaScript Scope works
本问题已经有最佳答案,请猛点这里访问。
我在读有关JavaScript作用域和提升的文章。我看到下面的一个样品,我心里有些疑惑。所以,我想知道它是如何工作的。
1 2 3 4 5 6 7 8 | var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); |
该代码将警告1!但是如果我们消除"function a()"部分,代码将警告10。
那么,它是如何工作的!"函数a()"在这里做什么以及它如何影响作用域。
在这段代码中,我也无法理解空"return"的含义。
那么,这段代码是如何依赖于JavaScript范围工作的呢?
首先,一个"空"的
简单的情况是,如果去掉
但对于
1 2 3 4 5 6 7 8 | var a = 1; // declare a global variable a function b() { function a() {} // declare a local function a a = 10; // update local a to be 10 instead of a function return; } b(); alert(a); // show value of global a, which is still 1 |
除了nnnnnn伟大的回答之外,我还试图想象一下形势。
使用
1 2 3 4 5 6 7 8 9 10 11 12 | scope: window scope: b | | | var a = 1; //window.a = 1; | | | | function b() { -----------------> | | | function a(){} // b.a(){} (hoisted to top) | | a = 10; // b.a = 10; | | return; | } <------------------------------ | | | | b(); | | alert(a); // alert(window.a); | |
我们可以看到,
1 2 3 4 5 6 7 8 9 10 11 | scope: window scope: b | | | var a = 1; //window.a = 1; | | | | function b() { -----------------> | | | a = 10; // window.a = 10; | | return; | } <------------------------------ | | | | b(); | | alert(a); // alert(window.a); | |
您的代码在功能上与此代码相同:
1 2 3 4 5 6 7 8 | var a = 1; function b() { var a = function() {} a = 10; return; } b(); alert(a); |
使用
实际上,如果你执行
1 2 3 4 5 6 7 8 9 10 | var a = 1; var c= 2; function b() { a() a = 10; return; function a() { alert(c) } } b(); alert(a); |
它将输出:
1 2 | 2 1 |
就我个人而言,我不使用这种符号,我总是明确地使用赋值。
杰西德