js基础及面试题

672 阅读1分钟

变量类型

  • 值类型

变量类型举例
undefineda = undefined
字符串a = 'abc'
数字a = 100
布尔值a = true
symbola = Symbol('s')
  • 引用类型
变量类型举例
对象a = {x:100}
数组a = ['a','b','c']
  • 特殊引用类型
变量类型举例
nulla = null
functionfunction 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