前端面试基础面试题

2017-07-06  本文已影响0人  二狗的小仙女

1.ng-show/ng-hide和ng-if的区别?

      angularJS中的ng-show. ng-hide. ng-if指令的都可以用来控制dom元素的显示或隐藏。ng-show和ng-hide根据所给表达式的值来显示或隐藏HTML的元素。当赋值给ng-show指令的值为false时元素会被隐藏,值为true时会元素会显示。ng-hide功能类似,使用方法相反。元素的显示或隐藏是通过改变css的display属性值来实现的。

2.This的指向问题,This在什么情况下不能用?

     this最终指向的是调用它的对象,这里的函数a实际是被window对象所点击出来的。

      this什么时候不能用:

                                      (1).定时器中不能用this。

                                      (2).事件中嵌套一层函数。 

                                      (3).行间中不能嵌套this。

                                      (4).attchevent不能用this。

3.数据类型:

                    (1).number

                    (2).string 

                    (3).object 

                    (4).undefined 

                    (5).null

                    (6).boolean

                    (7).symbol(ES6)

4.解释什么是$rootScope以及和$scope的区别?

通俗的说$rootscope是页面$scope的父亲。

(1).Angular解析ng-app然后在内存中创建$rootScope.

(2).Angular会继续解析,找到{{}}表达式,并且解析成变量。

(3).接着会解析带有ng-controller的div,然后指向某个controller函数,这个时候这个controller函数变成一个$scope对象实例。

5.列出至少三个实现不同模块之间通信的方式?

          (1).service

          (2).events.指定绑定的事件

          (3).使用$rootScope

          (4).controller之间直接作用$parent,$$childHead等。

          (5).directive指定属性进行数据绑定。

6.undefined什么时候用?

(1).函数没有返回值

(2).直接赋值(未定义) 变量声明未赋值

(3).返回一个不存在的属性

(4).传参数没有值

7.常见的浏览器内核

    Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]

   Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等

   Presto内核:Opera7及以上。[Opera内核原为:Presto,现为:Blink;] 

   Webkit内核:Safari,Chrome等。[ Chrome的:Blink(WebKit的分支)]

8.display:none与visibility:hidden的区别

联系:它们都能让元素不可见

区别:

         1.display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见

        2.display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility: hidden;是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式

       3.修改常规流中元素的display通常会造成文档重排。修改visibility属性只会造成本元素的重绘。

4.读屏器不会读取display: none;元素内容;会读取visibility: hidden;元素内容

9.CSS优先级算法如何计算?

     优先级就近原则,同权重情况下样式定义最近者为准;

    载入样式以最后载入的定位为准;

 优先级为:

同权重:内联样式表(标签内部)>嵌入样式表(当前文件中)>外部样式表(外部文件中)。

!important >  id > class > tag

important比内联优先级高

10.CSS有哪些继承属性

     (1).id选择器(# myid)

     (2).类选择器(.myclassname)

     (3).标签选择器(div, h1, p)

     (4).相邻选择器(h1 + p)

     (5).子选择器(ul > li)

     (6).后代选择器(li a)

     (7).通配符选择器(*)

     (8).属性选择器(a[rel = "external"])

     (9).伪类选择器(a:hover, li:nth-child)

          可继承:font-size font-family color, UL LI DL DD DT;

         不可继承:border padding margin width height ;

11.JavaScript原型,原型链?有什么特点?

          每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

关系:instance.constructor.prototype = instance.__proto__

特点:   JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

12.::before和:after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用。

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成)

双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,

比如:first-line、:first-letter、:before、:after等,

而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。

想让插入的内容出现在其它内容前,使用::before,否者,使用::after;

在代码顺序上,::after生成的内容也比::before生成的内容靠后。

如果按堆栈视角,::after生成的内容会在::before生成的内容之上

上一篇下一篇

猜你喜欢

热点阅读