今天碰到一道題,裡面既包含了匿名函式的知識,也包含了預編譯,函式的傳參(形參),感覺迷迷糊糊的,所以想著做個總結。
var foo=;(function
(foo);
console.log(foo.n);
})(foo);
console.log(foo.n);
上面的**,可以寫成這樣,看解釋
1var 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
按照上面的思路,如果第五行和第六行換一下呢
1var 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 那接下來這個呢
1var foo=;
2 (function(foo))(foo);
9 console.log(foo.n); //原始的
的記憶體空間值經過修改變為2,所以輸出2
結果輸出 1 2 2
下面和上面一樣了
1var foo=;
2 (function(foo))(foo);
9 console.log(foo.n); //原始的記憶體空間的值經過修改變
為3,所以輸出3
結果輸出 1 3 3
那下面這個呢(第五行和第六行都改變了指向,由於並不是在原來的基礎上修改的,所以最後輸入的值不變)
1var 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
這個就和上面的一樣了
1var 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...