第一題
(function(){ return typeof arguments; })();//問自動執行函數會返回什麼值
// 就是考Arguments對象的typeof // 看平時用firebug多不多了……
第二題
var f = function g(){ return 23; }; typeof g();//問最後一行的執行結果
//根據標準,命名函數運算式的函數名只對函數體內可見//因此報錯
第三題
(function(x){ delete x; return x; })(1);//問自動執行函數會返回什麼值
// 參數不可刪除//1
第四題
var y = 1, x = y = typeof x; x;//問最後一行的執行結果
//聲明兩個變數x與y,y最初賦為1,x沒有賦值,預設賦給window的一個屬性undefined, //因此typeof undefined為"undefined",最後x= y= "undefined"
第五題
(function f(f){ return typeof f(); })(function(){ return 1; });//問自動執行函數會返回什麼值
//函數名被優先順序更高的參數名覆蓋了 ---> // (function (f){ // return typeof f(); // })(function(){ return 1; }); //typeof 1 ---> "number"
第六題
var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar);//問自動執行函數會返回什麼值
//我們把下面那個自動執行函數分解一下 //var a = function(){ // return typeof arguments[0](); //}; //a(foo.bar) //執行完arguments[0](),即得到this.baz //由於this變數在此綁定失效,它指向window,window有bax變數嗎? //沒有,返回"undefined"
第七題
var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)();//問最後一行的執行結果
//我們把最後一行分解一下 //window.f //f= foo.bar // f() // typeof f() //返回"undefined"
第八題
var f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f;//問最後一行的執行結果
//首先要理解分組選擇符,最後a會賦給什麼呢? // var a = (1,2,3); // alert(a) ---> 3 //那麼這就簡單了,f = function(){return 2}; //typeof f() ---> number
第九題
var x = 1; if (function f(){}) { x += typeof f; } x;//問x的值
//函式宣告只能裸露於全域範圍下或位於函數體中。 //從句法上講,它們不能出現在塊中,例如不能出現在 // if、while 或 for 語句中。因為塊只能包含語句, //因此if()中的f函數不能當做函式宣告,當成運算式使用 //可能在先行編譯階段做了如下處理 //if((XXX = function(){})) //因此我們是找不到f的 // 1undefined
第十題
var x = [typeof x, typeof y][1]; typeof typeof x;//問最後一行的執行結果
//數組其實就是這個樣子["undefined","undefined"] //"string"
第十一題
(function(foo){ return typeof foo.bar; })({ foo: { bar: 1 } });//問自動執行函數會返回什麼值
//分解一下 // var bb = { foo: { bar: 1 } } // (function(j){ // return typeof j.bar // })(bb) // "undefined" //注意那個對象只有foo屬性,沒有bar屬性
第十二題
(function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })();//問自動執行函數會返回什麼值
//函式宣告會在先行編譯階段被提前//2
第十三題
function f(){ return f; } new f() instanceof f;//問這一行的值
//由於函數f會返回自身,這個new 就形同虛設 //如果f的形式為 function f(){return this}或function f(){}就不一樣 //false
第十四題
with (function(x, undefined){}) length;//問length的值為多少
//with就是一個讀寫器,題意是取出函數的length屬性 //而函數的length就是指它形參的長度 //2
---------------------
第十五題
var a = (function () { var A = null; function A() {} return A;})();//問自動執行函數會返回什麼值
//由於函式宣告比var變數的優先順序高//函數內部在先行編譯後,是這個樣子//var A//functionA(){};//A= null//return A//null
第十六題
(function (A) { var A = A; function A() {} return A;})(null);//問自動執行函數會返回什麼值
//function A() {}
第十七題
var a = (function () { return A; if (true) { function A($true) {} } else { function A($false) {} }})();
//FF報錯,IE返回unction A($false) {}