js的一道經典題目

2021-08-07 15:17:56 字數 2045 閱讀 7512

今天碰到一道題,裡面既包含了匿名函式的知識,也包含了預編譯,函式的傳參(形參),感覺迷迷糊糊的,所以想著做個總結。

var foo=;

(function

(foo);

console.log(foo.n);

})(foo);

console.log(foo.n);

上面的**,可以寫成這樣,看解釋

1

var foo=;

2 (function(foo); //

這行很關鍵,開闢了新的記憶體空間,n的值為2

7 console.log(foo.n); //

由於js中的**是自上而下執行,所以此時輸出2

8})(foo);

9 console.log(foo.n); //

之前的記憶體空間值為3,所以輸出3

結果輸出 1 2 3

按照上面的思路,如果第五行和第六行換一下呢

1

var foo=;

2 (function(foo); //

這行很關鍵,開闢了新的記憶體空間和之前的已經斷開聯絡,n的值為2

6 foo.n=3; //

改變了新的記憶體空間裡面的值,值現在變為3

7 console.log(foo.n); //

由於js中的**是自上而下執行,所以此時輸出3

8})(foo);

9 console.log(foo.n); //

之前的記憶體空間值為1,所以輸出1

結果輸出 1 3 1

ok   那接下來這個呢

1

var foo=;

2 (function(foo))(foo);

9 console.log(foo.n); //原始的

的記憶體空間值經過修改變為2,所以輸出2

結果輸出 1 2 2

下面和上面一樣了

1

var foo=;

2 (function(foo))(foo);

9 console.log(foo.n); //原始的記憶體空間的值經過修改變

為3,所以輸出3

結果輸出 1 3 3

那下面這個呢(第五行和第六行都改變了指向,由於並不是在原來的基礎上修改的,所以最後輸入的值不變)

1

var foo=;

2 (function(foo); //開闢了新的記憶體空間,n的值為2

6var foo=; //

開闢了新的記憶體空間,n的值為3

7 console.log(foo.n); //

由於js中的**是自上而下執行,所以此時輸出3

8})(foo);

9 console.log(foo.n); //原始的記憶體空間的值為

1,並沒被有被修改,所以輸出1

結果輸出 1 3 1

這個就和上面的一樣了

1

var foo=;

2 (function(foo); //開闢了新的記憶體空間,n的值為3

6var foo=; //

開闢了新的記憶體空間,n的值為2

7 console.log(foo.n); //

由於js中的**是自上而下執行,所以此時輸出2

8})(foo);

9 console.log(foo.n); //原始的記憶體空間並未被修改

,所以輸出1

結果輸出 1 2 1

以上為小弟解讀,如果過錯還請大神指教。

js的一道經典題目

今天碰到一道題,裡面既包含了匿名函式的知識,也包含了預編譯,函式的傳參 形參 感覺迷迷糊糊的,所以想著做個總結。var foo function foo console.log foo.n foo console.log foo.n 上面的 可以寫成這樣,看解釋 1 var foo 2 functi...

一道經典的筆試題

題目 給定字串a,字串b,比如a feb b jun 要求結果 befjun 把兩個字串拼寫成乙個有序的字串。不能用系統函式。這個題目曾經出現在 神州數碼,中訊漢揚等公司的筆試題目中。我的解答 static void main string args b astring,bstring string...

記一道經典前端題

題目如下 function foo return this foo.getname function foo.prototype.getname function var getname function function getname 輸出值 foo.getname getname foo ge...