变量类型
- 值类型
| 变量类型 | 举例 |
|---|---|
| undefined | a = undefined |
| 字符串 | a = 'abc' |
| 数字 | a = 100 |
| 布尔值 | a = true |
| symbol | a = Symbol('s') |
- 引用类型
| 变量类型 | 举例 |
|---|---|
| 对象 | a = {x:100} |
| 数组 | a = ['a','b','c'] |
- 特殊引用类型
| 变量类型 | 举例 |
|---|---|
| null | a = null |
| function | function a(){} |
- 类型判断
typeof:可以识别function和值类型,识别数组、对象、null均为object
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
作用域和闭包
- 全局作用域:函数外声明的变量,称为全局变量
- 函数作用域
- 块级作用域
if (ture) {
let a = 100
const b = 200
}
-
自由变量:当前作用域未定义但被使用,会依次向上寻找至全局作用域,未找到则报错
xx is not defined -
闭包:参数或返回值为函数
** 闭包函数的查找,是在函数定义位置向上级作用域查找,不是在执行的地方!!!**
// 函数作为返回值
function create() {
const a = 100
return function () {
console.log(a)
}
}
const fn = create()
const a = 200
fn() // 100
// 函数作为参数被传递
function print(fn) {
const a = 200
fn()
}
const a = 100
function fn() {
console.log(a)
}
print(fn) // 100