1. 程式人生 > >javascript易錯點

javascript易錯點

優先 沒有 round ring 過去 這一 rip string 多個

1.標題不知道叫什麽好。

2.一些比較繞的問題,可能出現在面試中。

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="UTF-8">
  5         <title></title>
  6     </head>
  7     <body>
  8        <script>
  9 //1題
 10        console.log(
 11            (function
(){ 12 return typeof arguments; 13 })()); //object 14 //arguments本身就是一個對象,類似數組,實際上是當前函數的內置屬性。arguments對象的長度是由實參個數而不是形參個數決定的。 15 16 //2題 17 var f = function g(){ 18 console.log(typeof g); //這裏可以訪問到g(); 19 return
23 20 } 21 // console.log( g()); //error 22 // 有名函數表達式創建了兩個不同的函數,他們的作用域不同。 23 24 25 //3題 26 console.log( 27 (function(x){ 28 // console.log(delete x); //false 29 delete x; 30 return x; 31 })(
1) 32 ); //1 33 //當一個屬性不能被刪除時,delete只返回false。 34 //與函數參數相對應的創建的屬性有DontDelete 特性,因此不能被刪除。http://www.cnblogs.com/jfp888/archive/2011/06/09/2076127.html 35 //4題 36 37 var y = 1, x = y = typeof x; 38 console.log(x); //undefined 39 // 鏈式賦值 40 41 //5題 42 var s= (function f(f){ 43 return typeof f(); 44 })(function(){return 1;}) 45 console.log(s); //number 46 47 //第二個括號定義了函數,並沒有執行,參數就是整個函數,調用f()的時候,按照鏈式作用域的優先級,傳過來的參數優先級高於函數本身。 48 49 //6題 50 var foo = { 51 bar: function() { 52 return this.baz; 53 }, 54 baz: 1 55 }; 56 57 s=(function(){ 58 return typeof arguments[0](); 59 })(foo.bar); 60 console.log(s); //undefined 61 //this關鍵字指向的是調用他的上下文環境的對象。foo.bar作為參數傳給匿名函數時候,this指向了調用他的匿名函數,找不到this.baz; 62 63 //7題 64 var foo = { 65 bar: function(){ 66 return this.baz; 67 }, 68 baz: 1 69 } 70 console.log(typeof (f=foo.bar)() ); //undefined 71 // 賦值語句作為函數體,不用想都不對。 72 73 //8題 74 var f = ( 75 function f(){ 76 console.log("111") 77 return "1"; 78 }, 79 function g(){ 80 console.log("2222") 81 return 2; 82 } 83 )(); 84 console.log(f); 85 console.log(typeof f); //number 86 //匿名函數裏有多個函數的時候,只執行了最後一個; 應該是括號找匿名函數體的時候,後一個覆蓋前一個。具體執行過程待查詢。 87 88 //9題 89 var x = 1; 90 if (function k(){}) { 91 x += typeof k; 92 } 93 console.log(x); //1undefined 94 //條件是函數體 ,就是代碼本身,所以if條件總是成立。但是條件中的函數,在內外部作用域中都找不到。 95 96 //10題 97 var n = [typeof n, typeof m][1]; 98 console.log(typeof n); //string 99 console.log(typeof typeof n); //string 100 //typeof 函數的返回值為string 101 102 //11題 103 console.log( 104 (function(foo){ 105 console.log("foo",foo.bar) 106 return typeof foo.bar; 107 })({ foo: { bar: 1 } }) 108 ); //undefined 109 //傳過去的是 {foo:{bar:1}}這個對象 ,所以函數中的foo,就是它,對於函數中的foo,只有foo這一個屬性,沒有bar屬性。 屬性的層級問題。 110 111 112 //12題 113 console.log( 114 (function f(){ 115 function f(){ return 1; } 116 return f(); 117 function f(){ return 2; } 118 })() 119 ); //2 120 //相同作用域下函數聲明提升,聲明的時候後邊的覆蓋前邊的,運行的時候,是執行不到return之後的語句的。 121 122 123 //13題 124 function f(){return f; } 125 // console.log(new f() instanceof f); //false 126 127 128 //14題 129 with (function(x, undefined){}) {var h=length}; 130 console.log(h); //2 131 132 //與(function(x,y){}).length;相同,with指定了代碼作用域,書寫方便,效率降低。 133 </script> 134 </body> 135 </html>

javascript易錯點