一道被"坑"到的前端Javascript面試題

前一段時間去了一個小公司面試前端,被”坑”的體無完膚了…,來分享一下這道題
一道js面試題,當時面試時完全說了一個相反的結果

  var a = { n : 1};  
  var b = a;  
  a.x = a = {n:  2};  
  alert(a.x);  
  alert(b.x);

結果是這樣的:

undefined  
[object Object]

其實這類問題很容易理解,只需要記得變量只是對象的引用,變量並不是對象本身。

  1. 取值的時候順着變量找到對象;
  2. 賦值的時候則改變變量的指向

所以

  1. 對於 var a = {n: 1},想象一個對象 {n: 1} 放地上,用 a 指着它;
  2. var b = a 就是 b 順着 a 找到 {n: 1},兩者同時指着它;
  3. a.x = a = {n:2} 左往右看,
    1.a.x 是對 a 取值,順着 a 找到 {n: 1},再找到其 x 屬性等待賦值,
    2.第二個 a 本應是取值,但右邊有 = 所以繼續變成了賦值操作,a 指向 {n:2},
    3.a = {n:2} 返回 {n:2},給了等待賦值的 {n: 1}.x;

  4. alert(a.x),順着 a 找到 {n:2},因爲在 3.2 中 a 改變了指向,而 {n: 2} 沒有 x 屬性;

  5. alert(b.x),順着 b 找到 {n: 1},{n: 1}在 3.1 得到了 x,順着 x 找到了 {n: 2}。

答案參考:https://segmentfault.com/q/1010000011462692?_ea=2643381

另一個面試題,是 this在箭頭函數和普通函數中的情況

參見: 深入理解 this, http://blog.csdn.net/yangbingbinga/article/details/61424363

轉自:http://blog.csdn.net/yangbingbinga/article/details/61424845

發佈了179 篇原創文章 · 獲贊 82 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章