首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Angular 1.x中,当在指令中“监视”时;为什么监视返回变量的函数的行为与仅仅监视变量的行为不同?

在Angular 1.x中,当在指令中"监视"时,监视返回变量的函数的行为与仅仅监视变量的行为不同的原因是因为它们在Angular的脏检查机制中被处理的方式不同。

当我们在指令中监视一个变量时,Angular会在每次脏检查循环中检查该变量是否发生了变化。如果变量发生了变化,Angular会执行相应的操作,比如更新视图。

然而,当我们监视返回变量的函数时,Angular会在每次脏检查循环中调用该函数来获取变量的最新值。这意味着每次脏检查循环都会调用该函数,即使变量的值没有发生变化。这可能会导致性能问题,特别是当监视函数执行开销较大时。

因此,监视返回变量的函数的行为与仅仅监视变量的行为不同,主要是因为监视函数会被频繁调用,而直接监视变量只需要检查变量的值是否发生变化。

在Angular中,推荐尽量避免在指令中监视返回变量的函数,以提高性能。如果需要监视一个函数返回的变量,可以考虑将该变量存储在一个对象中,并直接监视该对象的属性。这样可以减少监视函数的调用次数,提高性能。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular 2:Web技术发展必然选择

以上这些API,有一些是AngularJS 1.x 开始开发之后才发明出来,这就是为什么AngularJS 1.x 并没有用到它们大部分内容原因。...如前所述,Web Component 标准允许我们创建自定义标签并增加行为。这一点听起来似曾相识,因为AngularJS 1.x 应用,我们已经使用类似的概念开发用户界面了。...每绑定一块数据都会添加一个新监视器(watcher)。一旦digest 循环开始运行,它就需要遍历所有监视器,执行之相关表达,并把返回结果与上一次遍历所获得结果做比较。...监视器回调函数内部,Angular 经常直接操作DOM,从而无法把监视器移到WebWorker 中去,因为WebWorker 是独立上下文中被调用,无法直接访问DOM。...同时,AngularJS 1.x,各个监视器之间存在各种隐式或者显式依赖关系,这就要求digest 循环执行多次才能获得稳定结果。

1.8K10

再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

当你写下表达式如{{ val }},AngularJS幕后会为你scope模型上设置一个watcher(表达式将被 Angular 编译成一个监视函数),它用来在数据发生变化时候更新view。...每个监视函数每次 $digest 过程中被调用。因此,我们要注意观察器数量以及每个监视函数或者监视表达式性能。 $digest循环是什么时候以各种方式开始?...这些watchers会检查scope的当前model值是否和上一次计算得到model值不同。如果不同,那么对应回调函数会被执行。...所以说,两种不同监控方式,各有其优缺点,最好办法是了解各自使用方式差异,考虑出它们性能差异所在,不同业务场景,避开最容易造成性能瓶颈用法。...对象,依次解析根节点后代,根据多种条件查找指令,并完成每个指令相关操作(如指令作用域,控制器绑定以及transclude等),最终返回每个指令链接函数,并将所有指令链接函数合成为一个处理后链接函数

7.7K40

第214天:Angular 基础概念

DOM 操作; 让 JavaScript 中专注业务逻辑代码; 通过简单指令结合页面结构逻辑数据; 通过自定义指令实现组件化编程; 代码结构更合理; 维护成本更低; Angular 解放了传统...JavaScript 中频繁 DOM 操作 7、angular中最重要概念是指令(directive) - ng-model 是双向数据绑定指令,效果就是将当前元素value属性和模型user.name...- 控制器   + 接受用户界面上填写用户名和密码   + 将用户名和密码交给模型 - 视图   + 给用户呈现一个表单   + 接受用户输入内容,并将其提交给控制器   + 根据控制器返回数据...: 为应用模型设置初始状态 通过$scope对象把数据模型或函数行为暴露给视图 监视模型变化,做出相应动作 // 监视购物车内容变化,计算最新结果 $scope....不同点: AngularJS 表达式可以写在 HTML 。 AngularJS 表达式不支持条件判断,循环及异常。 AngularJS 表达式支持过滤器。

1.9K30

【17】进大厂必须掌握面试题-50个Angular面试

Angular指令是什么? Angular核心功能是指令,这些属性使您可以编写 特定于应用程序新HTML语法。它们本质上是Angular编译器DOM中找到它们执行函数。...Angular摘要周期是监视监视列表过程,以跟踪监视变量变化。每个摘要循环中,Angular都会比较范围模型值先前版本和新版本。...Angular组件具有离散生命周期,其中包含从出生到死亡过渡不同阶段。为了更好地控制这些阶段,我们可以使用以下方法将其连接: 构造函数: 通过类上调用new创建组件或指令将调用它。...被监视变量处于单个循环(摘要循环),任何变量任何值更改都会在DOM重新分配其他被监视变量值 32.区分DOM和BOM。...Angular事件是特定指令,可帮助自定义各种DOM事件行为

41.1K51

Visual Studio 调试系列2 基本调试方法

当你按下“重启”停止应用并重启调试器相比,它节省了时间。 调试器执行代码命中第一个断点处暂停。 若确实要停止调试器并返回到代码编辑器,可以按红色停止 ? 按钮而不是“重启”。 ?...“自动”窗口显示当前行或前一行使用所有变量 C++ ,该窗口显示前三个代码行变量。 查看文档以了解特定于语言行为)。 接下来,查看“局部变量”窗口。... JavaScript ,支持“局部变量”窗口,但不支持“自动”窗口。 11 设置监视 可使用“监视”窗口指定要关注变量(或表达式)。 调试,右键单击对象并选择“添加监视”。...本示例 sharp 对象上设置了监视当在调试器中移动,可看到其值发生了变化。 与其他变量窗口不同,“监视”窗口始终显示正在监视变量(当超出范围,它们会变灰)。...托管代码,您不能移动下一个语句,如果: (1)下一条语句当前语句不在同一个方法。 (2)实时调试启动调试。 (3)正在进行调用堆栈展开。

4.4K10

(4)Angular开发

image.png AngularJS MVC 模块化 自动化双向数据绑定 指令系统 下载 Angular.js 包 https://github.com/angular/angular.js...image.png HTML 页面 ng-xxx 属性称之为指令 ng-app 指令告诉 AngularJS, 元素是 AngularJS 应用程序管理边界 ng-model 指令把文本框值绑定到变量...name 上 Angular 最大程度减少了页面上 DOM 操作 让 JavaScript 中专注业务逻辑代码 通过简单指令结合页面结构逻辑数据 通过自定义指令实现组件化编程 我们需要本地运行...通过$scope对象把数据模型或函数行为暴露给视图 监视模型变化,做出相应动作 // 监视购物车内容变化,计算最新结果 $scope....scope暴露数据模型(数据,行为) AngularJS 表达式可以包含字母,操作符,变量 ng-repeat指令用来编译一个数组重复创建当前元素 <

3.1K40

线程和锁

虽然前面章节大部分讨论只涉及一次执行单个语句或表达式代码行为,也就是说,通过单个线程,Java虚拟机可以同时支持多个线程执行。这些线程独立地执行对共享主内存值和对象进行操作代码。...用户创建线程唯一方法是创建该类对象;每个线程都与这样一个对象相关联。当在相应线程对象上调用start()方法,线程将启动。 线程行为,特别是没有正确同步情况下,可能会令人困惑和违反直觉。...如果线程返回没有抛出InterruptedException异常,则它通常从等待状态返回。 设线程t是在对象m上执行wait 方法线程,设n是tm上没有解锁操作匹配锁定操作数量。...notify 通知操作调用notify和notifyAll方法发生。 设线程t是在对象m上执行这两种方法任何一种线程,设n是tm上没有解锁操作匹配锁定操作数量。...从等待集中删除后,u可以等待动作恢复。但是,请注意,u恢复锁定动作不能成功,直到一段时间后,t完全解锁m监视器 。

44520

AngularDart 4.0 高级-生命周期钩子 顶

Angular提供生命周期挂钩,提供这些关键生命时刻可视性以及发生行为能力。 指令具有相同生命周期挂钩集,减去特定于组件内容和视图挂钩。...构造函数本身不是一个Angular钩子。 日志确认输入属性(在这种情况下name属性)构造没有分配值。...Angular团队负责人Misko Hevery解释了为什么您应该避免使用复杂构造函数逻辑。 不要在组件构造函数获取数据。您不应该担心当在测试下创建或决定显示之前时新组件会尝试联系远程服务器。...构造函数不应仅仅将初始局部变量设置为简单值。 ngOnInit是组件获取其初始数据好地方。 教程和HTTP章节显示了如何。 还要记住,指令数据绑定输入属性构建之后才会设置。...在用户可以做任何事情之前,在这个例子它被调用了二十次。 大部分初始检查都是由Angular页面其他地方首次渲染(数据无关)而触发仅仅通过鼠标移动到另一个输入框就会触发一个呼叫。

6.1K10

2、Angular JS 学习笔记 – 双向数据绑定和Scope概念

当回调执行完成后,浏览器重新渲染dom,然后返回继续等待更多事件。 当浏览器调用js代码不在angular执行上下文,意味着angular无法发现模型修改。...如果watch修改了模型值,将会触发一次 Creation / 创建 根作用域应用启动时候由$injector创建,template linking阶段和指令将会创建新子作用域; Watcher...作用域和控制器: 作用域和控制器在下面的情况下相互作用: 控制器使用作用域暴露方法给模板 控制器定义方法可以改变模型 控制器可以注册监视器到模型,控制器行为执行后立即执行。...查看ng-controller了解更多信息 作用域$watch性能考虑 作用域脏检查属性变动angular是一个常规操作,所以脏检查函数需要尽可能快。...浏览器事件循环集成: 例子描述angular交互基于浏览器事件循环。 浏览器事件循环等待一个事件完成。事件希望是交互 ,时间时间,网络事件。 时间回调函数被执行后。

13.2K20

你知道Java并发三大问题么,volatile和CAS又是什么?

程序执行过程,下面这些你所不能预料行为都是可能发生: 编译器可能会进行指令重排序,所以b变量赋值操作可能先于a变量。...Java内存模型仅仅保证了代码指令变量操作有序性,大多数规则都只是指出什么时候变量值应该在内存和线程工作内存之间传输。...同步第二个特性可以视为一种机制:一个线程在运行已同步方法,它将发送和/或接收其他线程同步方法变量所做修改。从这一点来说,使用锁和发送消息仅仅是语法不同而已。...JSR-133为什么要增强volatile内存语义 JSR-133之前旧Java内存模型,虽然不允许volatile变量之间重排序,但旧Java内存模型允许volatile变量普通变量之间重排序...其结果就是:读线程B执行4,不一定能看到写线程A执行1对共享变量修改。 因此内存模型 ,volatile写-读没有监视释放-获所具有的内存语义。

42010

Angular2:从AngularJS 1.x 中学到经验

这里装饰器Python 装饰器或Java 注解非常类似。它们都可以使用反射机制来decorate(装饰)指定对象行为。... 1.x ,有些对象是根据参数位置顺序注入(例如scope、标签、属性,以及指令link 函数控制器);而其他对象则是根据名称注入(例如在控制器,指令,服务和过滤器中会根据参数名称进行注入...AngularJS 1.x 不同监视器之间可以相互依赖,从而导致了digest 循环必须进行若干次遍历,这些表达式结果才能最终趋于稳定。...为了获得更大灵活性,Angular 团队把脏值检测机制提取了出来,并且框架内核进行了解耦。这样一来就可以开发出不同脏值检测策略,不同环境可以采用不同策略。...到此,我们讨论了为什么需要使用最新版JavaScript 语言;为什么要使用Web Component 和WebWorker;以及为什么不值得1.x 版本整合所有这些强大工具。

2.7K10

Java锁全总结

这种机制确保了同一刻对于每一个类实例,其所有声明为 synchronized 成员函数至多只有一个处于可执行状态,从而有效避免了类成员变量访问冲突。...可重入锁不可重入锁:区分获取锁线程,还没释放锁之前,能否重复地获取锁。如果一个递归方法需要上锁,而当这个锁是不可重入锁,是无法递归。以生活例子举例,能理解为加塞行为是否允许。...当在餐厅进食,发现需要加菜,餐厅是允许这样加塞行为,也是合意。可如果你挂了号看医生,诊断完后,你对医生说“帮我朋友也看一下呗”,你看医生理不理你,如此,这样加塞行为是不允许。...可中断锁不可中断锁:是否允许迟迟申请不到锁,或线程发生中断能进行响应。可中断锁赋予了线程决定自己等待锁时间,以及对中断响应。...双重校验锁 为什么要用volatile修饰 因为如果不用volatile修饰的话, single=new Single(),会发生指令重排序, Single代码可以分解为三个部分 1.分配对象内存空间

16310

带你走近AngularJS - 创建自定义指令

创建自定义AngularJS 指令 文章开头自定义指令十分简单。它仅仅实现了同步功能。...指令构造函数返回带有属性JavaScript 对象。这些内容AngularJS 主页中都有清晰说明。...值可以是任意类型,包括复合对象和数组。指令可以更改父级Scope值,所以当指令需要修改父级Scope我们就需要使用这种类型。...save: "&" (表达式) “&”符号表示变量父级Scope启作用表达式。它允许指令实现比修改值更高级操作。 template: 替代原始模板标记字符串。...link 方法包含以下参数: scope: 指令Scope引用。scope 变量初始化时是不被定义,link 方法会注册监视监视值变化事件。

2.4K100

21.1 Java 多线程编程基础

多进程缺点:进程切换开销大;进程间通信不方便。 多线程: 指的是单个程序可以同时运行多个不同线程,执行不同任务,线程切换开销小 。... Java ,当我们启动 main 函数其实就启动了一个 JVM 进程,而 main 函数所在线程就是这个进程一个线程,也称主线程。...一个缺陷就可能破坏这种协助模型,导致严重后果。 • 获取监视器只能避免其他线程再次获取这个监视器,而不能保护对象。 • 即便对象监视器锁定了,不同方法也能看到(和修改)不一致状态。...多线程程序中使用 long 和 double 型共享变量,需要把变量申明为 volatile 以保证读取和写入操作完整性....volatile 性能 volatile 读性能消耗普通变量几乎相同,但是写操作稍慢,因为它需要在本地代码插入许多内存屏障指令来保证处理器不发生乱序执行。

26020

vue-04

创建Vue实例对象(vm), 指定选项(配置)对象 el : 指定dom标签容器选择器 data : 指定初始化状态数据对象/函数(返回一个对象) 3)....页面模板中使用{{}}或vue指令 3....数据代理: 由vm对象来代理对data中所有属性操作(读/写) 3). methods 包含多个方法对象 供页面事件指令来绑定回调 回调函数默认有event参数, 但也可以指定自己参数 所有的方法由...vue对象来调用, 访问data属性直接使用this.xxx 4). computed 包含多个方法对象 对状态属性进行计算返回一个新数据, 供页面获取显示 一般情况下是相当于是一个只读属性...利用set/get方法来实现属性数据计算读取, 同时监视属性数据变化 如何给对象定义get/set属性 创建对象指定: get name () {return xxx} / set name

67120

4.vue 双向绑定原理是什么?_监听门事件

双向绑定在不同表单元素原理 ---- 双向绑定 前面的指令和 { { }} 都是单向绑定,当用户主动文本框输入内容后,如果使用 :value=”str” 方式绑定,用户输入内容是无法自动回到程序变量中保存...双向绑定原理(高频笔试面试) 双向绑定就是单向绑定基础上,自动为元素添加 onchange 或 oninput 事件处理函数,并能在事件处理函数,自动将新值更新到 data 变量。...监视函数 专门用于监视一个变量变化,并在变量值发生变化时自动执行一个函数,只要希望一个变量值一改变,我们就能自动执行一项操作,都可用监视函数 watch。...双向绑定在不同表单元素原理 (1)文本框 和文本域 首次加载,v-model 将程序变量值更新到页面上文本框显示...,当用户主动文本框输入内容,v-model 自动将用户输入内容更新回程序变量中保存。

1.4K70

Redis系统学习之事物

收到 EXEC 命令后进入事务执行,事务任意命令执行失败,其余命令依然被执行。 事务执行过程,其他客户端提交命令请求不会插入到事务执行命令序列。...事务可以理解为一个打包批量执行脚本,但批量指令并非原子化操作,中间某条指令失败不会导致前面已做指令回滚,也不会造成后续指令不做。...监视(实现乐观锁) 悲观锁 很悲观,认为什么时候都会出问题,无论做什么都加锁 乐观锁 很乐观,认为什么时候都不会出现问题,所以不会加锁,更新数据时候,判断一下,在此期间是否有人改动过数据 获取version...提交后返回空,因为监控变量qian被修改过,所以不做任何操作 ok,也相当于事物回滚了 测试会不会有ABA问题 A线程 ? B线程 ? A线程 ?...当操作被打断返回空值null DISCARD命令:清空事务队列,并放弃执行事务,客户端会从事务状态退出 UNWATCH命令:取消watch对所有key监控 作者:彼岸舞 时间:2021\05\05

37120

【Linux】Linux调试器--gdb使用

选项,所有gcc是有两种默认行为。...通过指令可以读取可执行程序二进制构成,显示出具体二进制软件内部所形成特定格式。...值得注意是:每一个二进制程序不仅仅只是一堆二进制代码,他们内部都是有特定格式,Linux形成可执行程序是elf格式。...中所添加调试信息,而realease版本是没有这些调试信息 三、gdb使用 1.显示代码: l+行号(list)指令 gdb会默认记住历史上曾经输入指令,l+0输入后gdb会从第零行开始显示部分代码...,然后返回到调用地方:finish 11.临时查看变量或地址值:p + 变量或地址 12.监视跟踪查看/取消监视跟踪查看:display/undisplay 13.跳转到指定行:until+行号

3.5K30
领券