JavaScript變態題目

來源:互聯網
上載者:User

剛才發現的一些變態的 JavaScript 題目,做了一下,只對了一半,特此發到園子裡,和友友們分享一下。這些題目都是針對 Ecmascript 第三版的,原題裡面全部都是選擇題,有備選答案,這裡我把答案都去掉了,因為有的題目如果不看答案,你反而知道為什麼,看了答案你卻遲疑了,所以,直接來做吧,給自己一點自信,相信自己!

//題目 1(function(){    return typeof arguments;})();
//題目 2var f = function g(){ return 23; };typeof g();//題目 3(function(x){    delete x;    return x;})(1);//題目 4var y = 1, x = y = typeof x;x;//題目 5(function f(f){    return typeof f();})(function(){ return 1; });//題目 6var foo = {    bar: function() { return this.baz; },    baz: 1};(function(){    return typeof arguments[0]();})(foo.bar);//題目 7var foo = {    bar: function(){ return this.baz; },    baz: 1}typeof (f = foo.bar)();//題目 8var f = (function f(){ return "1"; }, function g(){ return 2; })();typeof f;//題目 9var x = 1;if (function f(){}) {    x += typeof f;}x;//題目 10var x = [typeof x, typeof y][1];typeof typeof x;//題目 11(function(foo){    return typeof foo.bar;})({ foo: { bar: 1 } });//題目 12(function f(){    function f(){ return 1; }    return f();    function f(){ return 2; }})();//題目 13function f(){ return f; }new f() instanceof f;//題目 14with (function(x, undefined){}) length;

怎麼樣,是不是感覺有些棘手,先仔細思考一下吧,繼續往下拉可以看到答案。

 

 

 

 

 

 

 

 

 

1.這一題如果理解了 arguments 到底是個什麼東西,就知道答案是什麼了。原題裡面,疑惑的答案有兩個:"object", "array"。準確答案是:"object" ,雖然 arguments 可以採用數組下標的方式來使用,但是它不是數組,而且,typeof 的傳回值裡面,從來都不會有 array

2.這一題的答案是:會報錯。要弄懂這一題,需要知道 function 的作用。在 JavaScript 裡面,function 有兩個作用,一是作為函式宣告,這個想必都可以理解,聲明函數時,函數會被提升到當前代碼的最頂端(被稱作函數提升);二是作為函數運算式,比如:

var f = function test(){}

此時,test 是可選的,如果加上 test ,並不會出現函數提升效果,test只是作為當前函數運算式的一個內部屬性(f.name)

3.這一題的答案是:1 。函數中的 delete 並沒有生效,在函數內部,delete 無法刪除形參,刪除時也不會報錯,所以 x 依舊是 x 。如果確實要刪除 x,使用 undefined 取消它的值吧

4.這一題的答案是:undifined 。賦值符號 = 具有右結合性,執行代碼的時候,先執行右邊的代碼,再執行左邊的代碼。所以 typeof x 是 undifined ,於是 x = y = undefined

5.這一題的答案是:“number"。這個比較有疑惑性。函數接受本身作為自己的參數,然後調用,此時就看誰更具有更高的優先順序了,顯然,參數的優先順序更高,所以實際執行的是:return typeof 1;

6.這一題的答案是 ”undefined"。這道題個人覺得有點疑惑,測試的 this 的用法。雖然 foo.bar 傳遞給了函數,但是真正執行的時候,函數 bar 的上下文環境是 arguments ,並不是 foo,arguemnts[0] 可以理解為 arguments.0(不過寫代碼就不要這樣了,文法會錯誤的),所以這樣看來,上下文環境是 arguemnts 就沒問題了

7.這一題的答案還是: “undefined"。對 foo.bar 來說,執行的時候上下文是 foo,但是當 把 foo.bar 賦值給 f 的時候,f 的上下文環境是 window ,是沒有 baz 的,所以是 ”undefined"

8.這一題的答案是:”number"。這道題測試的逗號運算式的文法,不詳細說了,不懂的話看下資料吧。

9.這一題的答案是:“1undefined"。理解這一題的關鍵與第 2 題類似,不懂的多看看第二題吧。

10.這一題的答案是:"string"。typeof 的結果一定是字串。所以對字串 再次 typeof ,肯定是 "string“ 了

11.這一題的答案是:"undefined"。太具有迷惑性了,純文字遊戲。形參 foo = {foo:{bar:1}} ,不存在 foo.baz ,所以結果是:”undefined"

12.這一題的答案是:2 。函數提升了兩次,第二次把第一次覆蓋了,所以 return 後面的 f 是 return 語句的下一條語句聲明的函數 f 。注意自執行函數 (function f (){})(); 中的 f 並沒有函數提升效果,它是運算式

13.這一題的答案是:false。建構函式本身在 new 的過程中會返回一個表示該對象的執行個體。但是函數的傳回值覆蓋了這個執行個體,所以答案是 false。話說,這個真的有點變態………………

14.這一題的答案是:2 。這道題開始是我在百度知道上面回答問題時看見的,一開始覺得寫錯了,後來問了一下,把這個變態題的網址給問出來了,然後沒有看答案,研究了一下,才知道為什麼。with的用法是這樣的:with(object) {},在大括弧裡面,可以引用object的屬性而不用使用object.attr這種形式。這道題裡面,with接受了一個對象,只不過這個對象是函數,函數有length屬性,代表形參的個數,所以上面返回的值是2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.