六、函数的扩展
函数参数的默认值
ES6中,允许直接为函数的参数设置默认值,如:
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
继续阅读 »
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
more
创建模块
要创建模块,可创建一个.py文件,在其中包含用于完成任务的函数。
案例(保存为 mymodule.py):
继续阅读 »
Version:Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
函数
可接受任意数量参数的函数
为了能让一个函数接受任意数量的位置参数,可以使用一个*参数
```python
def avg(first, *rest):
return (first + sum(rest)) / (1 + len(rest))
Sample use
avg(1, 2) # 1.5
avg(1, 2, 3, 4) # 2.5
``
在这个例子中,rest`是由所有其他位置参数组成的元组。然后我们
继续阅读 »
最近在网上看到有部分人在面试(比如1月面试记)的时候被问到了LazyMan,而且网友也有不同的实现方式。这里我用两种方式实现了lazyman,以供参考,如有更好的方法,欢迎留言。
队列
这种方式,每次都是往queue里添加执行函数,next函数用来决定什么时候调用下一个函数。
``js
var LazyMan = function LazyMan (name) {
if (!(this instanceof LazyMan)) return new LazyMan(name);
this.queue = [() => {
console.log(hello ${name}`);
继续阅读 »
在C语言里, 如何通过输入函数名字来调用函数?
直接上代码.
大致有三种方法:
用函数字典, 缺点是代码耦合在一起, 无法复用.
```
include
include
include
include
继续阅读 »
其实这篇文章主要是介绍这个东西 Proposal Bind Operator 或者 bind_operator。
也是在一个很偶然的机会看到了,git 上面的一个项目用到了这个用法,为什么自己发现不了这些东西呢?
传统的 this 绑定
在函数外面暂存一个变量
js
// 别名
var self = this;
setTimeout(function() {
this.doSomething();
}, 1000);
使用 bind 函数 & 箭头函数
在使用 class *** extends React.Component {} 的写法声明 React 组件的时候,组件的方法都不会被自动绑定 this 了,下面
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 2. Variable object.
参考了一些译文,作为自己学习 ECMAScript 的一点积累。
概要
创建应用程序的时,总免不了要声明变量和函数。然而,解析器(interpreter)是如何以及从哪里找到这些数据(变量,函数)的,当我们引用一个变量时,在解析器内部又发生了什么?
许多 ECMAScript 程序员都知道变量与执行上下文密切相关:
```js
var a = 10; // 全局上下文中的变量
(function () {
var b = 20; // 函数上下文中的局部变量
}
继续阅读 »
当我们编译多个文件时, 就会有多个目标文件.
这些模块最后如何形成一个单一的程序呢?
模块间通信
链接器的由来
C/C++模块之间通信的方式有两种, 一种是模块间函数调用, 另一种是模块之间的变量访问.
在编译成目标文件的时候, 由于没有办法得知所引用的外部函数或者外部变量的地址, 所以会先置0.
所以问题本质上就是, 如何得知目标函数或者目标变量的地址呢?
继续阅读 »
随着APP的不断开发,启动时(Application类的onCreate函数中)需要做的事情越来越多,这将导致APP冷启动(杀死进程后的第一次启动)变慢,有分析表明,APP冷启动时间大于2s时,大部分用户将失去耐心。
提升APP启动速度
其实并不是所有的事情都需要在Application类的onCreate函数中执行,例如一些第三方库的初始化,可以专门增加一个SplashActivity来初始化这些第三方库,但是同样的道理,如果这些初始化工作放到SplashActivity的onCreate函数中执行,APP的冷启动依然很慢,进一步的尝试是把这些初始化工作异步化。
继续阅读 »
建议:函数调用的时候,调用方传给被调用方的参数,如果在调用之后还会被修改,那么调用方应该给被调用方传一个当时的拷贝,深拷贝,否则将会导致潜在的bug:
可能被调用方是异步执行的,如果调用函数之后,参数发生了修改,那么被调用方执行的时候,看到的就是被修改之后的数据,这将导致严重、隐蔽、非必现的BUG,而这种BUG是最让人头疼的
可能被调用方会修改传入的参数,这就导致函数执行完毕之后,调用方看到的数据发生了非预期的变化,这同样会导致严重、隐蔽的BUG
继续阅读 »