闭包
闭包的优点:
1.可以读取函数内部的变量
2.这些变量的值始终保持在内存中
适用场景
作用域
作用域指的是有权访问的变量集合。
在 JavaScript 中有两种作用域类型:
- 局部作用域
- 全局作用域
JavaScript 拥有函数作用域:每个函数创建一个新的作用域。
作用域决定了这些变量的可访问性(可见性)。
函数内部定义的变量从函数外部是不可访问的(不可见的)。
局部JavaScript变量
在 JavaScript 函数中声明的变量,会成为函数的局部变量。
局部变量的作用域是局部的:只能在函数内部访问它们。
实例
// 此处的代码不能使用 carName 变量
function myFunction() {
var carName = "porsche";
// 此处的代码能使用 carName 变量
}
全局 JavaScript 变量
函数之外声明的变量,会成为全局变量。
全局变量的作用域是全局的:网页的所有脚本和函数都能够访问它。
实例
var carName = " porsche";
// 此处的代码能够使用 carName 变量
function myFunction() {
// 此处的代码也能够使用 carName 变量
}
javascript变量提升
变量提升:在 JavaScript 中,可以在使用变量之后对其进行声明。通过 var 声明的变量会提升到顶端.
用 let 或 const 声明的变量和常量不会被提升!
在不同的作用域或块中,通过 let 重新声明变量是允许的
通过 const定义的变量与 let 变量类似,但不能重新赋值。
const 变量必须在声明时赋值。但是可以更改常量对象的属性,也可以更改常量数组的元素,
const PI = 3.14159265359;
如何修改对象的属性:defineProperty.
JSON.parse(JSON.stringify(aaa).replace(/CourseName/g,"title"))
创建一个空对象
var emptyObj1 = {};
var emptyObj2 = new Object();
var emptyObj2 = Object.create(Object.prototype);
this指针
JavaScript this 关键词指的是它所属的对象。
它拥有不同的值,具体取决于它的使用位置:
在方法中,this 指的是所有者对象。
单独的情况下,this 指的是全局对象。
在函数中,this 指的是全局对象。
在函数中,严格模式下,this 是 undefined。
在事件中,this 指的是接收事件的元素。
像 call() 和 apply() 这样的方法可以将 this 引用到任何对象。
call()和apply()
apply()和call()差不多,只不过apply()第二个参数必须传入的是一个数组,而call() 第二个参数可以是任意类型。改变了 this 指向,让新的对象可以执⾏该函数,并能接受参
数
filter()的作⽤也是⽣成⼀个新数组,在遍历数组的时候将返回值为
true 的元素放⼊新数组,可以利用这个函数删除一些不需要的元素。
session和cookie的区别
cookie:数据存储在浏览器端;cookie有大小限制,以及浏览器在存cookie也有个数限制;cookie存储不太安全,别人可以通过拦截或本地文件得到你的cookie然后进行攻击。
session:数据存储在服务器端;session没有大小限制;session存储较为安全,占用服务器的内存。
token生成过程,如何生成token
token的作用是①防止表单重复提交,当点击一次提交按钮后,再点击就没用了②用来作身份验证
字符串
indexOf() 方法返回字符串中指定文本首次出现的索引(位置)
slice() 提取字符串的某个部分并在新字符串中返回被提取的部分。
该方法设置两个参数:起始索引(开始位置),终止索引(结束位置)。
var str = "Apple, Banana, Mango";
var res = str.slice(7,13);
replace() 方法用另一个值替换在字符串中指定的值
concat() 连接两个或多个字符串
trim() 方法删除字符串两端的空白符
split() 方法将字符串转换为数组
数组
indexOf() 方法在数组中搜索元素值并返回其位置
var colors=["yellow","red","blue","black"];
var a=colors.indexOf("yellow");
lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾开始搜索。
布尔值
JavaScript 提供一种布尔数据类型。它只接受值true或false。
所有不具有“真实”值的即为 False
布尔值为false:0(零)、-0 (负零)、""(空值)、undefined 、null 、NaN 。
constructor属性返回所有 JavaScript 变量的构造器函数。
"Bill".constructor // 返回 "function String() { [native code] }"
(3.14).constructor // 返回 "function Number() { [native code] }"
false.constructor // 返回 "function Boolean() { [native code] }"
[1,2,3,4].constructor // 返回 "function Array() { [native code] }"
{name:'Bill', age:62}.constructor // 返回" function Object() { [native code] }"
new Date().constructor // 返回 "function Date() { [native code] }"
function () {}.constructor // 返回 "function Function(){ [native code] }"
可以通过检查 constructor 属性来确定某个对象是否为数组(包含单词 "Array"):
例如:
function isArray(myArr){
return myArr.constructor.toString().indexOf("Array")
}
正则表达式
正则表达式是构成搜索模式(search pattern)的字符序列。当您搜索文本中的数据时,您可使用搜索模式来描述您搜索的内容。
语法
/pattern(模式)/modifiers(修饰符);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。