angular中controller、directive等为什么要用function包起来
2017-07-21 14:44
381 查看
学了一段时间angular,你有突然灵感一现,想过angular中controller、directive等为什么要用function包起来吗
既然只是想访问里面的变量和方法,为什么不直接用对象呢
让我猜一猜:
首先,function声明的时候做的事情你必须清楚,这里假装已经清楚了
function比对象的优点是:
1.function可以实现原型链继承;
2.function可以注入服务;
3.function函数执行时,会生成上下文,会创建的作用域链。
【插个小段:
上下文与作用域(scope)是不同的概念。Js本身是单线程的,每当有function被执行时,就会产生一个新的上下文,
这一上下文会被压入Js的上下文堆栈(context stack)中,function执行结束后则被弹出,
因此Js解释器总是在栈顶上下文中执行。
在生成新的上下文时:
首先会绑定该上下文的变量对象,其中包括arguments和该函数中定义的变量;
之后会创建属于该上下文的作用域链(scope chain);
最后将this赋予这一function所属的Object。
】
虽然我们不会调用声明controller时写的这个函数,但是这个函数为我们提供了相当的便利,这些是对象做不到的,但是函数却可以实现像对象一样访问其内部属性的功能。
既然只是想访问里面的变量和方法,为什么不直接用对象呢
让我猜一猜:
首先,function声明的时候做的事情你必须清楚,这里假装已经清楚了
function比对象的优点是:
1.function可以实现原型链继承;
2.function可以注入服务;
3.function函数执行时,会生成上下文,会创建的作用域链。
【插个小段:
上下文与作用域(scope)是不同的概念。Js本身是单线程的,每当有function被执行时,就会产生一个新的上下文,
这一上下文会被压入Js的上下文堆栈(context stack)中,function执行结束后则被弹出,
因此Js解释器总是在栈顶上下文中执行。
在生成新的上下文时:
首先会绑定该上下文的变量对象,其中包括arguments和该函数中定义的变量;
之后会创建属于该上下文的作用域链(scope chain);
最后将this赋予这一function所属的Object。
】
虽然我们不会调用声明controller时写的这个函数,但是这个函数为我们提供了相当的便利,这些是对象做不到的,但是函数却可以实现像对象一样访问其内部属性的功能。
相关文章推荐
- angularJS directive中的controller和link function辨析
- AngularJS Error: [ng:areq] loginController is not a function
- AngularJs Directive Pass value/object/function to Scope
- var tensquared=(function(x) {return x*x;}(10)); //这是一个函数表达式 问:为什么花括号后面还有一个(10)的?而且整个句子用()扩起来?这个是什么表
- AngularJS Argument 'customersController' is not a function, got undefined,errors.angularjs.org/1.3.1
- angularJS+requireJS实现controller及directive的按需加载示例
- angularJS+requireJS实现controller及directive的按需加载
- angularJS+requireJS实现controller及directive的按需加载
- AngularJs directive-controller实例
- angularJS+requireJS实现controller及directive的按需加载
- angular中,controller、directive和factory
- angularJs $ocLazyLoad controller not function undefine
- angular如何组织controller directive service
- AngularJS + ui-router + RequireJS异步加载注册controller/directive/filter/service
- angularJS+ui-router+requireJS异步加载controller、directive、filter
- Angular1.0 在Directive中调用Controller的方法
- angularJS+requireJS实现controller及directive的按需加载
- angularjs controller, service, directive 的demo
- 使用@Controller注解为什么要配置<mvc:annotation-driven />
- 为什么说国内在线教育还做不起来?