重囗另类BBWSeⅹHD,av狼论坛,精品一卡2卡三卡4卡乱码理论,体育生gv老师浪小辉3p警察

一道阿里巴巴Web前端面試題拓展

時間:2024-06-18 02:44:50 學人智庫 我要投稿
  • 相關推薦

一道阿里巴巴Web前端面試題拓展

  第二第三個問題由第一個拓展而來,先看問題吧:

一道阿里巴巴Web前端面試題拓展

  第一問:

  var a = 6;

  setTimeout(function () {

  alert(a); //輸出66

  a = 666;},

  1000);

  a = 66;

  第二問:

  var a = 6;

  setTimeout(function () {

  var a = 666;

  alert(a); // 輸出666,

  }, 1000);

  a = 66;

  第三問:

  var a = 6;

  setTimeout(function () {

  alert(a); // 輸出undefined,

  var a=666;

  }, 1000);

  a = 66;

  這三個問題涉及到了setTimeout的工作原理,執行環境與作用域還有函數的創建與調用。

  首先先說一下setTimeout(function(),ms)函數,現在在我們的js文件中有這么一段代碼:setTimeout( a() , 5000 );。

  在執行流執行到setTimeout代碼時,并不會原地踏步地等待執行完畢后再向下執行,而是會告訴瀏覽器,我這段代碼要等待5秒之后再執行,然后立即向下執行接下來的代碼。

  現在可以先解決第一問了。

  首先定義了一個局部變量a,并且a=6 。然后執行流遇到了setTimeout(),告訴瀏覽器,我1秒之后再執行這段代碼,此時a仍然為6。然后跳過setTimeout()中的代碼繼續向下執行,就碰到了a=66,將a賦值為66 。一秒過去了之后,瀏覽器開始調用setTimeout()函數中的匿名函數,遇到了alert(a),在此之前匿名函數中并沒有創造局部變量a,所以隨著作用域鏈由內向外搜尋有沒有變量a。當搜尋到外部函數的作用域時,發現a已經被賦值成了66,則返回結果,最終彈出窗口顯示66。

  第二問中,由于在setTimeout()的匿名函數中擁有了一個局部變量a,所以最后alert(a)輸出的是666,這一個沒什么可說的。

  至于第三問的解答,涉及到了一個函數的創建與執行的區別,讓我想起了C和C++中的函數創建執行部分(更多的是本人的猜想,未經求證),在進入setTimeout()函數之后,我們得先創建一個函數,然后才能執行它,在創建函數的時候,會搜尋函數內部是否有變量創建出來了。所以,當執行流遇到alert(a)的時候,開始搜尋當前環境下有沒有a變量,最終發現了一個a變量,但是在未執行var a=666之前,a并沒有被賦值,所以alert(a)的最終結果為undefined。

  這三個問題涉及到了setTimeout的工作原理,執行環境與作用域還有函數的創建與調用。

http://www.ipr-jzsc.com/

【一道阿里巴巴Web前端面試題拓展】相關文章:

Web前端面試題目及答案06-30

前端工程師面試題10-20

阿里巴巴的HR10-14

阿里巴巴面試技巧07-19

Microsoft面試題09-04

iOS面試題07-10

公司面試題09-12

hibernate面試題10-18

英語面試題精選06-13

小升初面試題06-10

主站蜘蛛池模板: 营口市| 通城县| 嘉定区| 灵台县| 汝州市| 呼伦贝尔市| 彩票| 洞口县| 平安县| 枣强县| 四子王旗| 宜川县| 报价| 宁武县| 丰台区| 文水县| 兰西县| 石楼县| 当雄县| 西安市| 崇信县| 浦北县| 三亚市| 渝中区| 钟祥市| 洛宁县| 乌拉特后旗| 利辛县| 东乡县| 诸暨市| 额济纳旗| 遂宁市| 静安区| 沾益县| 边坝县| 莒南县| 常山县| 灵武市| 平果县| 鸡泽县| 永靖县|