题目
- var、let和const的区别
- var是ES5语法,let和const是ES6的语法;var有变量提升
- var和let声明的是变量,可修改;const声明的是常量,不可修改
- let和const有块级作用域,var没有
-
typeof返回哪些类型
所有值类型变量:symbol、bigInt、undefined、string、number、boolean
引用类型object、function -
列举强制类型转换和隐式类型转换
强制类型转换:- parseInt、parseFloat等
- Number()、String()、toString()等
隐式类型转换:
- if
- 逻辑运算
- ==
- +拼接字符串
-
列出以下输出:
// 第一题
function fn() {
var i = 5;
return function (n) {
// 这里的i词法作用域往上找
console.log(n * i++);
}
}
var f = fn();
f(4); // 20
fn()(5); // 重新形成了闭包,所以未25
f(6); // 之前闭包中的i并未被回收,所以+1了,这里为36
// 第二题
var i = 3;
function fn() {
i *= 2;
return function (n) {
console.log(n * (++i))
}
}
var f = fn(); // i = 6
f(3); // 21; i = 7
fn()(3); // 45; i = 15
f(4); // 64; i = 16
fn()(3); // 99; i = 33
// 第三题
var length = 1000
var obj = {
length: 10,
fn: function (fn) {
fn() // 这里this是window
arguments[0]() // 这里this是arguments
}
}
function fn () {
console.log(this.length)
}
obj.fn(fn, 1, 2, 3)
知识点
- 变量提升
ES5中,函数声明和变量声明存在提升,变量声明提升、函数整体提升,提升到当前代码最上方,并初始化为undefined(变量声明),并且函数声明提升优先级大于变量声明(函数声明位于变量声明提升之前,若两个名字一样,最终结果一直是变量提升之后的值)
console.log(a) // undefined
var a = 200
console.log(b) // error
let b = 200