【總結】有意思的web前端文章或題目(五)

來源:互聯網
上載者:User

標籤:typeof   作用   epc   []   運算式   tor   html   extend   標識   

1.預解析相關
(function() {   console.log(typeof foo);    console.log(typeof bar);    var foo = ‘hello‘,       bar = function() {           return ‘world‘;       };   function foo() {       return ‘hello‘;   }}());

結果:

functionundefined

文章地址:http://blogread.cn/it/article/6178

2.閉包相關

程式碼片段一:

var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      return function(){        return this.name;      };    }  };  alert(object.getNameFunc()());

結果:The Window

程式碼片段二:

var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      var that = this;      return function(){        return that.name;      };    }  };  alert(object.getNameFunc()()); 

結果:My Object
文章地址:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

3.淺拷貝與深拷貝

淺拷貝:

function extendCopy(p) { var c = {}; for (var i in p) {   c[i] = p[i]; } return c;}

深拷貝:

function deepCopy(p, c) {  var c = c || {};  for (var i in p) {    if (typeof p[i] === ‘object‘) {      c[i] = (p[i].constructor === Array) ? [] : {};      deepCopy(p[i], c[i]);    } else {              c[i] = p[i];    }  }  return c;}

淺拷貝的問題:如果父物件的屬性等於數組或另一個對象,那麼實際上,子物件獲得的只是一個記憶體位址,而不是真正拷貝,因此存在父物件被篡改的可能。

4.js中怎麼理解按位取反?

Javascript 按位取反運算子 (~) ,對一個運算式執行位非(求非)運算。如 ~1 = -2; ~2 = -3;來看看~1的計算步驟:

  1. 將1(這裡叫:原碼)轉二進位 = 00000001

  2. 按位取反 = 11111110

  3. 發現符號位(即最高位)為1(表示負數),將除符號位之外的其他數字取反 = 10000001

  4. 末位加1取其補碼 = 10000010

  5. 轉換回十進位 = -2

按位取反的運算規則這麼奇怪並不是JavaScript專屬的,而是所有的電腦語言都是這樣的。這樣做的主要原因是為了為了統一減法和加法,在電腦中,減法會變成加一個負數,而負數會以補碼的形式儲存。而這樣主要是因為補碼和數位十進位數有這麼轉換關係,負數:補碼(x) = -x - 1,正數:補碼(x) = x

可參考:二進位如何轉十進位,十進位如何轉二進位
問題地址:https://segmentfault.com/q/1010000005697515

5.javascript文法之標籤(label)

JavaScript語言允許,語句的前面有標籤(label),相當於定位器,用於跳轉到程式的任意位置,標籤的格式如下。

label:  statement

標籤可以是任意的標識符,但是不能是保留字,語句部分可以是任意語句。

標籤通常與break語句和continue語句配合使用,跳出特定的迴圈。

top:  for (var i = 0; i < 3; i++){    for (var j = 0; j < 3; j++){      if (i === 1 && j === 1) break top;      console.log(‘i=‘ + i + ‘, j=‘ + j);    }  }// i=0, j=0// i=0, j=1// i=0, j=2// i=1, j=0

上面代碼為一個雙重迴圈區塊,break命令後面加上了top標籤(注意,top不用加引號),滿足條件時,直接跳出雙層迴圈。如果break語句後面不使用標籤,則只能跳出內層迴圈,進入下一次的外層迴圈。

continue語句也可以與標籤配合使用。

top:  for (var i = 0; i < 3; i++){    for (var j = 0; j < 3; j++){      if (i === 1 && j === 1) continue top;      console.log(‘i=‘ + i + ‘, j=‘ + j);    }  }// i=0, j=0// i=0, j=1// i=0, j=2// i=1, j=0// i=2, j=0// i=2, j=1// i=2, j=2

上面代碼中,continue命令後面有一個標籤名,滿足條件時,會跳過當前迴圈,直接進入下一輪外層迴圈。如果continue語句後面不使用標籤,則只能進入下一輪的內層迴圈。

說明:
break語句和continue語句都具有跳轉作用,可以讓代碼不按既有的順序執行。
break語句用於跳出代碼塊或迴圈。
continue語句用於立即終止本輪迴圈,返回迴圈結構的頭部,開始下一輪迴圈。

【總結】有意思的web前端文章或題目(五)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.