1.判断是否是一个函数,是否是一个对象
console.log(f1.__proto__.constructor.name == 'Function')
console.log(obj.__proto__.constructor.name == 'Object')
2.'use strict' 严格模式
1.变量必须声明 var num
2.不能随便删除变量 delete num;//变量没有var 也不可被删除
3.调用函数必须写明谁调用
4. 构造函数需要使用new
5. setTimeout 在定时器中this还是指向window
6. 名字不能重复
3.高阶函数
//参数为函数或者返回值为函数的 函数为高阶函数
function demo(fn) {
// setTimeout(function() {
// fn()
// }, 2000)
return function() {
console.log("111")
}
}
4.闭包
// 闭包!!!
// 1.函数嵌套函数
// 2.内部函数使用了外部函数的变量或者参数!!!
// 3.导致使用的变量或者参数不会被直接被释放!!!!
// 就形成了闭包!!!
//作用
// 1、读取函数内部的变量
// 2、让这些变量的值始终保持在内存中。不会再f1调用后被自动清除。
// 3、方便调用上下文的局部变量。利于代码封装。
function fn1(){
var num = 10;
return function f2 () {
return num;
}
}
var fn = fn1();
console.log(fn())
5.递归
// 递归函数: 函数内部调用自己,这个函数就是递归!!!
6.数组的深拷贝
//数组变量名存在栈内存内,数值存在堆内存内 var arr2 = arr1,只是给了一个引用地址、
// 深度拷贝3
var arr4 = [1, 2, 3, 4, 5]
var str = JSON.stringify(arr4) // 这是一个字符串
console.log(str)
var arr5 = JSON.parse(str)