函数依赖

一起学Vue之计算属性和侦听器

断了今生、忘了曾经 提交于 2019-12-11 01:34:04
概述 在Vue开发中,模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。当你想要在模板中多次引用相同表达式时,就会更加难以处理。所以,对于任何复杂逻辑,你都应当使用计算属性。本文主要讲解Vue中的计算属性和侦听器,仅供学习分享使用,如有不足之前,还请指正。 计算属性 计算属性步骤: 1. 在computed属性中增加reverseMsg方法,如下所示: 1 <script type="text/javascript"> 2 var vm = new Vue({ 3 el: '#app', 4 data: { 5 msg: 'welcome to vue world!!!' 6 7 }, 8 computed: { 9 reverseMsg: function() { 10 // `this` 指向 vm 实例 11 return this.msg.split('').reverse().join(''); 12 } 13 } 14 15 }); 16 </script> 2. 在Html中进行引用,你可以像绑定普通属性一样在模板中绑定计算属性。 Vue 知道 vm.reverseMsg 依赖于 vm.msg,因此当 vm.msg 发生改变时,所有依赖 vm.reverseMsg 的绑定也会更新。如下所示: 1 <p>原始信息:

Windows下hiredis分布式组件移植

北城余情 提交于 2019-12-07 12:13:52
1. 问题描述 分布式组件项目使用了Redis,在Windows平台使用QT+VS2010编译环境。但Redis客户端库hiredis在Windows平台只提供静态库,而且必须用VS2013以上的版本才能编译。由于VS2013要更新部分组件才能避免编译错误,最终以VS2015编译hiredis.lib静态库。这样就面临如下问题: VS2010不支持完整的C++11特性,linux能直接使用std::thread的代码在Windows无法编译。 但使用该组件的应用程序在Windows系统以VS2010编译,不能直接用VS2015编译出的hiredis.lib继续编译应用程序。 2. 解决过程 2.1. 跨系统移植 2.1.1.务必初始化所有变量 因为某个ID变量没有初始化,在linux运行正常,但移植到windows就出现错误。原因是该变量在linux被缺省初始化为0,单在Windows是随机值。 从代码的质量考虑,不能依赖系统的缺省值,必须养成初始化所有变量的习惯。 2.1.2.VS早期版本不支持C++11的全部标准 代码中使用了C++11的thread,在linux和Windows的VS2015运行正常,但在VS2010编译出错。原因是VS2012之前的版本不支持C++11标准。为此不得不大量使用条件编译,改用CreateThread等函数。 2.2.

模块化Javascript编程基础

房东的猫 提交于 2019-12-07 10:10:36
(一) 随着网站逐渐变成" 互联网应用程序 ",嵌入网页的Javascript代码越来越庞大,越来越复杂。 网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。 Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。 但是,Javascript不是一种模块化编程语言,它不支持" 类 "(class),更遑论"模块"(module)了。(正在制定中的 ECMAScript标准 第六版,将正式支持"类"和"模块",但还需要很长时间才能投入实用。) Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。虽然这不是初级教程,但是只要稍稍了解Javascript的基本语法,就能看懂。 一、原始写法 模块就是实现特定功能的一组方法。 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。   function m1(){     //...   }   function m2(){     //...   } 上面的函数m1()和m2(),组成一个模块。使用的时候,直接调用就行了。 这种做法的缺点很明显:"污染"了全局变量

JavaSript模块规范

牧云@^-^@ 提交于 2019-12-06 16:12:00
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。 首先,既然是模块化设计,那么作为一个模块化系统所必须的能力: 1. 定义封装的模块。 2. 定义新模块对其他模块的依赖。 3. 可对其他模块的引入支持。 好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等

数据库关系理论模式分解理解和总结

纵饮孤独 提交于 2019-12-06 05:20:15
Armstrong公理系统 逻辑蕴涵 定义/解释 比如A->B B->C 在关系模型R<U,F>中成立,可以得到A->C字R中也成立,所以称F逻辑蕴含A->C。 闭包 定义/解释 在关系模型R中,F所 逻辑蕴涵 的 所有函数依赖 叫做F的闭包,记为 \(F^{+}\) 。 某个属性集关于依赖集的闭包 定义/解释 即已有X这个属性集作为左部,通过依赖集F的所有函数依赖,可以推导出的所有函数依赖,称为X关于F的闭包,记为 \(X_F^{+}\) 例题 已知关系模型R<U,F>,其中U={A,B,C,D,E} F={AB->C,B->D,C->E,EC->B,AC->B},求 \((AB)_F^{+}\) 。 算法:把AB作为左部,然后从F中找到左部是完全属于AB的,把对应的右部并到AB里,作为新的左部,重复直到不能再增加左部或者已经等于全集。 结果: \((AB)_F^{+}\) =ABCDE 最小依赖集 例题 F={abd->e,ab->g,b->f,c->j,cj->i,g->h} 算法: 将右部有多个的 拆开 ,比如ab->cd 变成 ab->c,ab->d 尝试删除左侧的冗余函数依赖,具体操作是对于每个函数依赖X->A,假设将该依赖删除,然后求X在剩下的依赖集中的闭包 \(X_G^{+}\) ,如果A属于这个闭包,那么就可以删除。 尝试删除左侧的冗余属性

Dojo1.6新特性:AMD规范

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 00:57:55
1. AMD的由来 前端技术虽然在不断发展之中,却一直没有质的飞跃。除了已有的各大著名框架,比如Dojo,JQuery,ExtJs等等,很多公司也都有着自己的 前端开发框架。这些框架的使用效率以及开发质量在很大程度上都取决于开发者对其的熟悉程度,以及对JavaScript的熟悉程度,这也是为什么很多公司 的技术带头人都喜欢开发一个自己的框架。开发一个自己会用的框架并不难,但开发一个大家都喜欢的框架却很难。从一个框架迁移到一个新的框架,开发者很有可 能还会按照原有框架的思维去思考和解决问题。这其中的一个重要原因就是JavaScript本身的灵活性:框架没办法绝对的约束你的行为,一件事情总可以 用多种途径去实现,所以我们只能在方法学上去引导正确的实施方法。庆幸的是,在这个层面上的软件方法学研究,一直有人在去不断的尝试和改 进,CommonJS就是其中的一个重要组织。他们提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供银蛋,提供统一的指引。 AMD规范 就 是其中比较著名一个,全称是Asynchronous Module Definition,即异步模块加载机制。从它的规范描述页面看,AMD很短也很简单,但它却完整描述了模块的定义,依赖关系,引用关系以及加载机制。 从它被requireJS,NodeJs,Dojo,JQuery使用也可以看出它具有很大的价值,没错

关系型数据库几大范式的理解总结

為{幸葍}努か 提交于 2019-12-05 19:35:48
范式的定义 关系型数据库中的关系是需要满足一定条件的,满足这些不同程度的规范化就叫做范式。 范式按照规范化程度从低到高排序为第一范式,第二范式,第三范式,BC范式,第四范式,第五范式。 前导知识 函数依赖 R(U)是属性集U的关系模型,X,Y是U的一个子集,对于R(U)中的任一个关系r,不可能存在两个元组在X上属性值相同,而在Y上属性值不同。则称X函数确定Y,或Y函数依赖X。 说人话:U是表(可能不止一个表,可以是有关系的多个表)的所有列,X,Y分别是这些属性列的一个子集,也就是若干个属性, 对于所有在X这些属性上的值一样的行,在Y上的属性上也必须一样 ,满足这样条件的这若干个属性 X和Y叫称其函数依赖。 X相同则Y必须相同,但 X不同Y可以相同,也可以不同 。 如果Y是X的子集,就叫 平凡的函数依赖 ,一般不考虑这种,因为就是废话,X整个都相同,子集肯定相同。 如果Y不是X的子集,叫做 非平凡的函数依赖 。 如果Y函数依赖X,那么X称为决定因素。 如果Y函数依赖X,但不依赖X的任何一个真子集,也就是X是极小的,那就称 Y完全函数依赖X ,否则称 Y部分函数依赖X 。 如果X决定Y,Y决定Z,且 Y不决定X ,那么称 Z对X传递函数依赖 。 码(键) U是属性全集,K是U的子集,若U完全函数依赖K,则称K为 候选码 ,候选码若有多个,任意选择一个都可作为 主码 ,若U部分函数依赖K

深入浅出Node.js

≡放荡痞女 提交于 2019-12-05 14:31:58
深入浅出Node.js 一直想致力于写一篇关于广义讲解Node.js系统的文章,苦于时间有限,资源有限。这篇文章是在结合自己的学习心得以及与行业大佬共同探讨下争对于熟练掌握JS语言后的广义Node.js.至于为什么叫作广义在后文会提到。希望看到这篇文章后可以激发大家对Node.js的学习兴趣,这篇文章的初衷就是致力于帮助大家可以走进Node.js世界。 简介: Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非 常好。 底层选择用c++和v8来实现的 注意:广义的Node.js是指不掌握以底层C++技术以及V8知识,利用Node.js运行在服务端的JS特性完成操作,很多小伙伴会产生疑惑Node.js是什么,简单的来说:Node.js是解析器. 优势: RESTful API 这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高

【VUE】Vue 源码解析

≡放荡痞女 提交于 2019-12-05 11:17:39
Vue 源码解析 Vue 的工作机制 在 new vue() 之后,Vue 会调用进行初始化,会初始化生命周期、事件、props、methods、data、computed和watch等。其中最重要的是通过 Object.defineProperty 设置 setter 和 getter ,用来实现 响应式 和 依赖收集 。 初始化之后,调用 $mount 挂载组件。 启动编译器 compile() ,对template进行扫描,parse、optimize、generate,在这个阶段会生成渲染函数或更新函数, render function ,生成虚拟节点数,将来我们改变的数据,并不是真的DOM操作,而是虚拟DOM上的数值。 在更新前,会做一个diff算法的比较,通过新值和老值的比较,计算出最小的DOM更新。执行到 patch() 来打补丁,做界面更新,目的是用JS计算的时间换DOM操作的时间。因为页面渲染很耗时间,所以vue的目的就是减少页面渲染的次数和数量。 render function 除了编译渲染函数以外,还做了一个依赖搜集(界面中做了很多绑定,如何知道和数据模型之间的关系)。当数据变化时,该去界面中更新哪个数据节点。通过观察者 watcher() 来调用更新函数 patch() 编译 编译模块分为三个阶段 parse 使用正则解析template中vue的指令变量等

前端面试题(3)现代技术

我的梦境 提交于 2019-12-05 08:31:02
什么是单页面应用(SPA)? 单页面应用(SPA)是指用户在浏览器加载单一的HTML页面,后续请求都无需再离开此页 目标:旨在用为用户提供了更接近本地移动APP或桌面应用程序的体验。 流程:第一次请求时,将导航页传输到客户端,其余请求通过 REST API 获取 JSON 数据 实现:数据的传输通过 Web Socket API 或 RPC(远程过程调用)。 优点:用户体验流畅,服务器压力小,前后端职责分离 缺点:关键词布局难度加大,不利于 SEO 什么是“前端路由”? 什么时候适用“前端路由”? 有哪些优点和缺点? 前端路由通过 URL 和 History 来实现页面切换 应用:前端路由主要适用于“前后端分离”的单页面应用(SPA)项目 优点:用户体验好,交互流畅 缺点:浏览器“前进”、“后退”会重新请求,无法合理利用缓存 模块化开发怎么做? 封装对象作为命名空间 -- 内部状态可以被外部改写 立即执行函数(IIFE) -- 需要依赖多个JS文件,并且严格按顺序加载 使用模块加载器 -- require.js, sea.js, EC6 模块 通行的 Javascript 模块的规范有哪些? CommonJS -- 主要用在服务器端 node.js var math = require('./math'); math.add(2,3); AMD(异步模块定义) -- require