值得看看的前端面試題


1、JS一道面試題求y的值是? z 的值是? s的值是?

<script type="text/javascript">
  var x = 1;
  var y = 0;
  var z = 0;
  function add(n){n=n+1;}
  y = add(x);
  function add(n){n=n+3;}
  z = add(x);
  s=y+z;
</script>

求:
y的值是?
z 的值是?
s的值是?
我相信,肯定有同學會答錯,當然,不是說他們不會,而是他們可能太大意了!

我們首先看function add,兩個add都沒有返回值,而我們知道,沒有明確返回值的,全部返回undefined,所以,y和z都會是undefined,那么s自然也就不會是一個數字了,沒錯,s應該是NaN。
假如我們將題目改一下呢?如下:
<script type="text/javascript">
  var x = 1;
  var y = 0;
  var z = 0;
  function add(n){return n=n+1;}
  y = add(x);
  function add(n){return n=n+3;}
  z = add(x);
  s=y+z;
</script>
兩個function add都有返回值了,那么,y,z,s會是多少呢?
不錯,y和z都是4,s是8,為什么y不是2而是4呢?因為在javascript中,直接通過function申明的函數,后面定義的,會影響到之前的引用,如下:
<script type="text/javascript">
function x(){alert(2)};
x();//output 3
function x(){alert(3)};
x();//output 3
</script>
如果是通過var來申明的函數會是什么情況呢?我們看看:
<script type="text/javascript">
var x = function(){alert(0)};
x();//output 0
var x=function(){alert(1)};
x();//output 1
x();//output 1
</script>
通過var申明的函數,后面定義的並不會影響前面的引用。
如果兩種模式混合,又會是什么情況呢?
<script type="text/javascript">
function x(){alert(2)};
x();//output 3
var x = function(){alert(0)};
x();//output 0
var x=function(){alert(1)};
x();//output 1
function x(){alert(3)};
x();//output 1
</script>
結果是這樣的,你猜到了嗎?
通過function定義的函數,后面定義的,照舊影響了前面的引用,但是不能改變通過var申明函數后的引用,反而,通過var申明的函數,改變了后來通過function申明函數之后的引用。
所以,如果:
<script type="text/javascript">
var x=function(){alert(1)};
x();
function x(){alert(3)};
x();
</script>
后面的x()出來的也會是1。

 

2、前端面試題整理:實現一個對頁面某個節點的拖拽

3、如何通過 JS 識別怪異模式和標准模式?兩種模式有什么區別?

  要想寫出跨瀏覽器的CSS,必須知道瀏覽器解析CSS的兩種模式:標准模式(strict mode)和怪異模式(quirks mode)。

  所謂的標准模式是指,瀏覽器按W3C標准解析執行代碼;怪異模式則是使用瀏覽器自己的方式解析執行代碼,因為不同瀏覽器解析執行的方式不一樣,所以我們稱之為怪異模式。瀏覽器解析時到底使用標准模式還是怪異模式,與你網頁中的DTD聲明直接相關,DTD聲明定義了標准文檔的類型(標准模式解析)文檔類型,會使瀏覽器使用相應的方式加載網頁並顯示,忽略DTD聲明,將使網頁進入怪異模式(quirks mode)。

  <html>

    <head>

        <title>重慶PHP</title>

    </head>

    <body>

        <h3>重慶PHP,最專業的PHP社區</h3>

    </body>

  </html>

  如果你的網頁代碼不含有任何聲明,那么瀏覽器就會采用怪異模式解析,便是如果你的網頁代碼含有DTD聲明,瀏覽器就會按你所聲明的標准解析。

  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  <html>

      <head>

        <title>重慶PHP</title>

      </head>

      <body>

        <h3>重慶PHP,最專業的PHP社區</h3>

      </body>

  </html>

  上面的代碼,瀏覽器會按HTML 4.01的標准進行解析。

  標准模式中IE6不認識!important聲明,IE7、IE8、Firefox、Chrome等瀏覽器認識;而在怪異模式中,IE6/7/8都不認識!important聲明,這只是區別的一種,還有很多其它區別。所以,要想寫出跨瀏覽器的CSS,你必須采用標准模式。好像太絕對了,呵呵。好吧,要想寫出跨瀏覽器CSS,你最好采用標准模式。

  到底都有哪些聲明呢?哪種聲明更好呢?我們建議你使用XHTML 1.0最嚴格模式,從一開始我們就應該嚴格的要求自己,具體聲明如下:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  如果你接手的是一個遺留網頁,最初並沒有DTD聲明,並且使用了很多在XHTML中已經廢除的標簽,那么,我們建議你使用XHTML兼容模式,聲明如下:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  那么如何的識別呢?舉一個簡單的例子

   方法一:執行以下代碼

   alert(window.top.document.compatMode) ;

   //BackCompat  表示怪異模式

   //CSS1Compat  表示標准模式

   方法二:jquery為我們提供的方法,如下:

   alert($.boxModel)

   alert($.support.boxModel)

    var compat=window.top.document.compatMode;

    var cw=compat=="BackCompat"?

    window.top.document.body.clientWidth:

    window.top.document.documentElement.clientWidth;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM