簡體   English   中英

解釋這段JavaScript代碼

[英]Interpreting this piece of JavaScript code

我有以下代碼:

 var f = function () {
     var x = 1;
     g = function () {
         x = 2;
     };
     g();
     return x;
 };

像這樣運行時:

> f();
> 2
> g();
> undefined
> x;
> undefined

實際上我知道為什么f()返回1,但是現在我有一個新問題:為什么x在調用g()之后返回undefined

我聲明了函數g()而不使用var關鍵字,因此函數g現在位於全局對象中。 然后我調用g ,我認為函數g應該在全局對象中創建一個新的全局變量x ,值2因為我沒有使用var關鍵字。 但是實際上x只是返回undefined ,為什么?

無論如何,請大家幫我!

PS:所有這些代碼都在Node.JS REPL中運行。

好在這里回答您的問題並進行澄清:

我以為g()應該返回1但是它是2

沒有g()不返回任何東西,它沒有return語句,因此它不會返回12

為什么在調用g()之后x返回undefined

並且xf函數的局部變量,因此它將拋出Uncaught ReferenceError: x is not defined如果Uncaught ReferenceError: x is not definedf函數外部調用Uncaught ReferenceError: x is not defined

編輯:

編輯后,您詢問:

我以為f()應該返回1但是應該是2

好吧,在那種情況下,我會說這是正確的行為,並且是調用f()的預期結果,它應該返回2因為xf()函數的局部變量,而g()可以訪問此局部變量,因為它是f()局部變量f()也是如此,因此當您將f x初始化為1 ,然后在返回x之前調用g() ,會將x設置為2 ,這就是為什么得到2的原因。

如你看到的 :

g = function () {
         x = 2;
};

沒有退貨聲明 f的范圍內聲明AND(因此無法通過全局范圍訪問) ; 因此它不會返回任何值(提示未定義)。

對於f

 var f = function () {
     var x = 1;
     g = function () {
         x = 2;
     };
     g();
     return x;
 };

調用f它聲明變量x並將其初始化為1。然后聲明一個修改x的“內部函數”(由於xg之前已聲明,因此可以通過g的范圍對其進行訪問。在g的聲明之后)您調用它,因此x變為2。因此f的返回值為2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM