函数调用

判断栈和堆的生长方向

旧时模样 提交于 2020-03-27 21:22:15
如何判断栈的增长方向? 对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。 在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题。 C在哪里会用到栈呢?稍微了解一点C的人都会立刻给出答案,没错,函数。我们知道,局部变量都存在于栈之中。似乎这个问题立刻就得到了解答,用一个函数声明两个局部变量,然后比较两个变量的地址,这样就可以得到答案。 等一下,怎么比较两个变量的地址呢? 先声明的先入栈, 所以,它的第一个变量的地址如果是高的,那就是从上向下增长。“先声明的先入栈”?这个结论从何而来?一般编译器都会这么处理。要是不 一般呢?这种看似正确的方法实际上是依赖于编译器的,所以,可移植性受到了挑战。 那就函数加个参数,比较参数和局部变量的位置,参数肯定先入栈。那为什么不能局部变量先入栈?第一反应是怎么可能,但仔细想来又没有什么不可以。所以,这种方法也依赖于编译器的实现。 那到底什么才不依赖于编译器呢? 不妨回想一下,函数如何调用。执行一个函数时,这个函数的相关信息都会出现栈之中,比如参数、返回地址和局部变量

生命周期

霸气de小男生 提交于 2020-03-27 13:23:58
构造函数: 同其它高级语言, 只执行一次; initState: 插入到渲染树时调用,只执行一次。(类似Android Fragment的onCreateView函数) didChangeDependencies: 1、在初始化initState后执行; 2、显示/关闭其它widget。 3、可执行多次; didUpdateWidget: 上级节点rebuild widget时, 即上级组件状态发生变化时会触发子widget执行didUpdateWidget; deative: deactivate 有点像Android的onStop函数, 在打开新的Widget或回到这个widget时会执行; 可执行多次; dispose: 类似于Android的onDestroy, 在执行Navigator.pop后会调用该办法, 表示组件已销毁; reassemble: 点击闪电会执行,只用于调试时的hot reload。 release版本不会执行该函数。 来源: https://www.cnblogs.com/zhaofeis/p/12580629.html

react的生命周期

流过昼夜 提交于 2020-03-27 12:47:23
什么是声明周期? 组件本质上就是状态机,输入确定,输出一定确定。如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx。第二个就是组件把状态和结果一一对应起来,从而能够直观的看出来,程序在不同的状态是的输出。属性是由父组件传递给子组件的,状态是子组件内部维护的一些数据,当状态发生变化时候,组件也会进行更新,因此我们可以理解成一个state对应一个render的结果,这样我们就可以知道在不同的state下,组件会render出什么样的结果,从而就知道组件在页面上展示的内容是什么。状态机本质上就是状态和转移的结合,我们刚才说过,不同的状态对应不同的输出,状态和状态之间有时候会发生转换,当状态发生转变的时候,会触发不同的钩子函数,从而让开发者有机会做出相应,因为状态转换是由react来进行维护的。作为开发者没有 办法直接的参与到状态转换中,但是react给我们提供了很多钩子函数,我们可以自己来编写这些钩子函数,这样react在进行状态转换的时候,就可以调用我们的状态函数。 我们也可以用事件的思路来理解状态,开发者不知道什么时候会发生事件,但是我们可以决定在发生事件的时候,执行什么动作,也就是事件的监听器,状态和事件有一些类似,他们的区别是事件和事件之间没有直接的关系,每个事件都是独立发生的,但是状态和状态之间是有关系的,组件可以处于不同的状态中

Vue2.0源码阅读笔记(二):响应式原理

夙愿已清 提交于 2020-03-27 11:45:22
  Vue是数据驱动的框架,在修改数据时,视图会进行更新。数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触。而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的更为高效。 一、实现简单的数据响应式系统   Vue使用 观察者模式 (又称 发布-订阅模式 )加 数据劫持 的方式实现数据响应式系统,劫持数据时使用 Object.defineProperty 方法将 数据属性 变成 访问器属性 。Object.defineProperty 是 ES5 中一个无法 shim 的特性,因此Vue 不支持 IE8 以及更低版本浏览器。   Vue源码中对数据响应式系统的实现比较复杂,在深入学习这部分源码之前,先实现一个较为简单的版本更有助于后续的理解。代码如下所示: let uid = 0 // 容器构造函数 function Dep() { // 收集观察者的容器 this.subs = [] this.id = uid++ } Dep.prototype = { // 将当前观察者收集到容器中 addSub: function(sub) { this.subs.push(sub) }, // 收集依赖,调用观察者的addDep方法 depend: function() { if(Dep.target){ Dep.target.addDep(this)

面向对象

你。 提交于 2020-03-27 08:43:44
一、基本概念 1. 面向过程 (1) 概念:以过程为中心的编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 (2) 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。 (3) 缺点:只能用来解决一个问题,代码牵一发而动全身。 (4) 应用:用于基本很少改变的场景,著名的例子有Linux内核、git、以及Apache HTTP Server等。 2. 面向对象 (1) 概念:程序设计的核心是对象,面向对象的方法主要是把事物给对象化,对象包括属性与方法。 (2) 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。 (3) 缺点:可控性差,无法像面向过程的程序设计一样可以精准的预测问题的处理流程与结果。 (4) 应用:需求经常变化的软件,一般需求的变化都集中在用户层,如互联网应用、企业内部软件以及游戏等。 二、面向对象中的名词解析 1. 类:类就是一个模板,模板里可以包含多个函数,每个函数都能实现一些功能。 2. 对象:根据模板(类)创建的实例,通过这个实例(对象)可以执行类中的函数。 3. 属性:类中所定义的变量 4. 方法:类中所定义的函数 5. 实例化

05-Vue入门系列之Vue实例详解与生命周期

谁都会走 提交于 2020-03-27 06:41:50
原文地址 http://www.cnblogs.com/fly_dragon/p/6220273.html 05-Vue入门系列之Vue实例详解与生命周期 Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理、数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成、编译、挂着、销毁等过程进行js控制。 5.1. Vue实例初始化的选项配置对象详解 前面我们已经用了很多次 new Vue({...}) 的代码,而且Vue初始化的选项都已经用了 data 、 methods 、 el 、 computedd 等,估计您看到这里时,应该已经都明白了他们的作用,我们就详细讲解一下他们的使用情况。更详细的请参考 官网内容 5.1.1. Vue实例的的data对象 介绍 Vue的实例的数据对象data 我们已经用了很多了,数据绑定离不开data里面的数据。也是Vue的核心属性。 它是Vue绑定数据到HTML标签的数据源泉,另外Vue框架会自动监视data里面的数据变化,自动更新数据到HTML标签上去。本质原理是:Vue会自动将data里面的数据进行递归抓换成getter和setter,然后就可以自动更新HTML标签了,当然用getter和setter所以老的浏览器Vue支持的不够好。 data对象的类型:

js部分高级内容

守給你的承諾、 提交于 2020-03-27 06:06:01
数据类型 基本:String,Number,boolean(true,false),undefined(undefined),null(null) 引用类型:Object,Function(可以执行),Array(数值下标,有序) 特别地,null无值的对象(用来清空对象),NaN无值的数字,undefined不存在或者存在未赋值 typeof 返回数据类型的字符串形式(小写) 判断字符串,数值,布尔,函数可行。未定义和undefined都返回undefined也勉强可,null和其他引用类型返回object不可(null和undefined用===) instanceof判断实例对象与类(沿原型链向上找)的关系,返回布尔值 var声明局部变量(不可删),直接赋值沿原型链向上找成window的一个属性(可删) 沿作用域链找不到没定义报错,沿原型链找不到是undefined 只有通过属性改变的引用对象才使相同的改变 obj.age=15//有效 obj={age:15}//无效,更改了引用地址 function fn(obj){console.log(obj)}//函数传入的obj是传入参数的一个引用值,与原变量无关(重要),一种基本值,一种引用值(地址) 自动释放和垃圾回收器回收 function fn(){var b={name:'alice'}} //未被引用的才会被释放回收

jquery ajax api

核能气质少年 提交于 2020-03-27 00:36:58
执行一个异步的HTTP(Ajax)的请求。 version added: 1.5 jQuery.ajax( url, [ settings ] ) url 一个用来包含发送请求的URL字符串。 settings 一个以"{键:值}"组成的AJAX 请求设置。所有选项都是可选的。可以使用 $.ajaxSetup() 设置任何默认参数。看 jQuery.ajax( settings ) 下所有设置的完整列表。 version added: 1.0 jQuery.ajax( settings ) settings 一个以"{键:值}"组成的AJAX 请求设置。所有选项都是可选的。可以使用 $.ajaxSetup() 设置任何默认参数。 accepts Map 默认: 取决于数据类型 内容类型发送请求头,告诉服务器什么样的响应会接受返回。如果 accepts 设置需要修改,推荐在 $.ajaxSetup() 方法中做一次。 async Boolean 默认: true 默认设置下,所有请求均为异步请求(也就是说这是默认设置为 true )。如果需要发送同步请求,请将此选项设置为 false 。跨域请求和 dataType: "jsonp" 请求不支持同步操作。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend(jqXHR, settings)

socket通信基础内容

亡梦爱人 提交于 2020-03-26 16:55:37
对 TCP/IP、 UDP、 Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 1. 什么是 TCP/IP、 UDP? 2. Socket在哪里呢? 3. Socket是什么呢? 4. 你会使用它们吗? 什么是 TCP/IP 、 UDP ? TCP/IP( Transmission Control Protocol/Internet Protocol)即传输控制协议 /网间协议,是一个工业标准的协议集,它是为广域网( WANs)设计的。 UDP( User Data Protocol,用户数据报协议)是与 TCP相对应的协议。它是属于 TCP/IP协议族中的一种。 这里有一张图,表明了这些协议的关系。 图 1 TCP/IP协议族包括运输层、网络层、链路层。现在你知道 TCP/IP与 UDP的关系了吧。 Socket 在哪里呢? 在图 1中,我们没有看到 Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。 图 2 原来 Socket在这里。 Socket 是什么呢? Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据

Python3 函数

别说谁变了你拦得住时间么 提交于 2020-03-26 16:33:37
3 月,跳不动了?>>> 参数传递 可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。 python 函数的参数传递: 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。 python 传不可变对象实例 实例: #!/usr/bin/python3 def ChangeInt( a ): a = 10 b = 2