西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)javascript|JQuery → Ecmascript 第三版的變態(tài)題目

Ecmascript 第三版的變態(tài)題目

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/5/20 0:40:36字體大。A-A+

作者:西西點擊:2次評論:0次標簽: ecmascript

  • 類型:音頻處理大。1M語言:中文 評分:5.1
  • 標簽:
立即下載

這些題目都是針對 Ecmascript 第三版的,原題里面全部都是選擇題,有備選答案,這里我把答案都去掉了,因為有的題目如果不看答案,你反而知道為什么,看了答案你卻遲疑了,所以,直接來做吧,給自己一點自信,相信自己!

//題目 1

(function(){
    return typeof arguments;
})();
//題目 2
var f = function g(){ return 23; };
typeof g();

//題目 3
(function(x){
    delete x;
    return x;
})(1);

//題目 4
var y = 1, x = y = typeof x;
x;

//題目 5
(function f(f){
    return typeof f();
})(function(){ return 1; });

//題目 6
var foo = {
    bar: function() { return this.baz; },
    baz: 1
};
(function(){
    return typeof arguments[0]();
})(foo.bar);

//題目 7
var foo = {
    bar: function(){ return this.baz; },
    baz: 1
}
typeof (f = foo.bar)();

//題目 8
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;

//題目 9
var x = 1;
if (function f(){}) {
    x += typeof f;
}
x;

//題目 10
var 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; }
})();

//題目 13
function f(){ return f; }
new f() instanceof f;

//題目 14
with (function(x, undefined){}) length;

怎么樣,是不是感覺有些棘手。

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

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

var f = function test(){}

此時,test 是可選的,如果加上 test ,并不會出現(xiàn)函數(shù)提升效果,test只是作為當前函數(shù)表達式的一個內(nèi)部屬性(f.name)

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

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

5.這一題的答案是:“number"。這個比較有疑惑性。函數(shù)接受本身作為自己的參數(shù),然后調(diào)用,此時就看誰更具有更高的優(yōu)先級了,顯然,參數(shù)的優(yōu)先級更高,所以實際執(zhí)行的是:return typeof 1;

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

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

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

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

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

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

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

13.這一題的答案是:false。構(gòu)造函數(shù)本身在 new 的過程中會返回一個表示該對象的實例。但是函數(shù)的返回值覆蓋了這個實例,所以答案是 false。話說,這個真的有點變態(tài)………………

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

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)