1. 变量提升
函数声明和变量声明会被解析器提升到方法体的顶部
// 变量声明-提升
x = 5
console.log(x)
var x
// 等同于
var x
x = 5
console.log(x)
// 函数声明-提升
fn() // 先调用-后声明
function fn () {}
// 等同于
function fn () {}
fn() // 先声明-后调用
// 补充-函数表达式变量不会提升
fn()
var fn = function () {}
// 报错 fn is not a function
// 引入es6 ( let 声明变量)
let x
x = 5
console.log(x)
// let 声明变量-不提升(就是为了防止变量提升)
console.log(n) let n = 9
// 报错
2. function与class的对比
// 先来絮叨絮叨function
// 2.1 function 与 Function
// function 是一个关键字可以声明一个函数对象:
function test () {}
// Function是一个构造器,function是Function实例化的一个对象,包含[[call]][[code]]等等属性,
// 它的每个参数都是字符串形式
function callAnotherFunc(fnFunction, vArgument) {
fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10); // 输出 "20"
// callAnotherFunc instanceof Function
// 2.2 function 与 class
// class事实上是一种特殊的function,es6引入的新语法,class语法也有两种形式:一种是声明,一种是表达式
class A {} // 声明
let A = class {} // 表达式
3. setTimeout()和setInterval()
3.1 setTimeout(): 在指定的毫秒数后调用函数或计算表达式。(执行一次)
let time1 = setTimeout(function() {console.log('1111')}, 3000)
// 通过clearTimeout(time1)关闭定时器
3.2 setInterval() : 按照指定的周期(以毫秒计)来调用函数或计算表达式。(会不停的调用函数)
let time2 = setInterval(function() {console.log('2222')}, 3000)
// 通过window.clearInterval(time2) 关闭定时器