前端面试题之——AngularJS

一 面试题汇总

  1. 依赖注入的原理,如何实现一个简单的依赖注入
  2. 什么是脏检查?

二 面试题解答(仅供参考)

2.1 依赖注入的原理,如何实现一个简单的依赖注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
依赖注入原理通俗的说就是当一个函数需要某些对象的时候,这个函数只需要指明自己需要的对象,就会有一个容器 
将这些对象自动传递给这个函数,在angularjs中的具体表现比如说我们定义了一个service,
就可以在控制器中将这个 service作为参数使用。

实现一个简答的依赖注入需要一个注册函数来作为依赖的注册,可以利用一个对象来实现注册依赖 的保存。
一个注入函数来实现注入,注册函数很好处理,只需要将依赖的名字和对应的函数保存在依赖对象即可,
而注入函数显然 需要的参数是一个声明依赖的数组,一个逻辑函数,对这个依赖数组遍历查看是否注册,
使用hasOwnProperty是比较好的方法,
如果没有注册则放弃,注册了就将他push到一个数组中,最后返回一个function,
这个function只需要使用apply方法将数组 作为参数传递给注入函数中的函数参数即可实现。

如何实现注入函数忽略参数传递的顺序?

可以利用正则去解析注册函数的参数,将注入函数中函数参数的参数解析出来,然后逐个去依赖中查询即可,
这会带来的问题就是如果 压缩的话,这些参数会被一些简单的字母代替,
也就意味着失效,angularjs的解决方式使用数组作为参数,
数组最后一个就是依赖注入的函数 ,当然这得保持依的顺序。

2.2 什么是脏检查?

1
2
3
脏检查是Angularjs的视图更新机制,Angularjs就是通过脏检查来检测数据是否变动,
在angular中,只有一些特定的事件才能触发脏值检查
比如:DOM事件(比如:用户输入点击按钮)、XHR响应事件、Location变更事件、定时器事件等。

三 参考

  • FE-Interview—AngularJS