JS之事件捕获和事件冒泡

DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。

事件捕获(event capturing): 当鼠标点击或者触发dom事件时(被触发dom事件的这个元素被叫作事件源),浏览器会从根节点 =>事件源(由外到内)进行事件传播。

事件冒泡(dubbed bubbling): 事件源 =>根节点(由内到外)进行事件传播。

3

阅读全文 »

JS之函数防抖和函数节流

函数防抖(debounce)

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function debounce(func, delay) {
var timeout;
return function(e) {
clearTimeout(timeout);
var context = this, args = arguments
timeout = setTimeout(function(){
func.apply(context, args);
},delay)
};
};

var validate = debounce(function(e) {
console.log("change")
}, 380);

// 绑定监听
document.querySelector("input").addEventListener('input', validate);

阅读全文 »

JS中Array对象的一些注意事项

1.若用push()来合并两个数组,例a.push(b)那么一整个b数组才是a数组的一个子元素

1
2
3
4
let array1 = [1,2,3];
let array2 = [4,5];
array1.push(array2);
console.log(array1[3]); //4 5

若用concat()方法每个参数的顺序依次是该参数的元素(如果参数是数组)或参数本身(如果参数不是数组)。它不会递归到嵌套数组参数中。

阅读全文 »

js之高阶函数

概念

高阶函数是指至少满足下列条件之一的函数。

  • 函数可以作为参数被传递
  • 函数可以作为返回值输出

高阶函数的应用场景

高阶函数主要用于抽离出项目中容易变化的业务逻辑,并对这部分业务逻辑进行封装,从而分离业务代码中变化与不变化的部分。以下为高阶函数比较常见的应用场景。

阅读全文 »

js之闭包

变量的作用域

在JavaScript中,函数内部可以读取全局变量。

1
2
3
4
5
6
7
var n=999;

function f1(){
alert(n);
}

f1(); // 999

但是,函数外部无法读取函数内部的局部变量。

阅读全文 »

Django报错集合

1.ValueError: Dependency on app with no migrations: users

这是因为我们没有对app users进行数据迁移

执行下面两条命令即可:

1
2
python manage.py  makemigrations
python manage.py migrate

2.Forbidden (CSRF cookie not set.): /users/register

这是因为Django对表单post请求做的安全性验证,在app开发中,可以干掉这一项

到setting里面注释掉下面的注释位置就好

1
2
3
4
5
6
7
8
9
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

阅读全文 »