延迟函数(以下两者的this都指向window)
setTimeout(function () { console.log(123) }, 3000); //只执行一次 setInterval(function () { console.log(123) }, 3000); //连续不断的执行 var id = setTimeout(function () { console.log(456) }, 1000); clearTimeout(id) //清除当前的定时器 clearInterval()
作用域
JavaScript的作用域也称为函数作用域,因为js中作用域的划分是以函数来进行的
局部作用域:
在函数内部能够访问变量的所在区域
在函数内部使用var定义的任意变量都是局部变量
局部作用域对应的作用域我们称之为函数作用域
外部是不能直接访问函数内部的变量
全局作用域:
在代码的任何地方都可以访问的变量,称为全局变量
全局变量是直接绑定在window作用域上面的
直接暴露在script标签中的变量是一个全局的(就是没有看到function的)
注意:作用域以函数来进行划分
在寻找变量的时候,先从自己开始找,逐级向外寻找,找到离它最近的变量,直到window
当我们在函数内部定义变量的时候省略var关键字,则这个变量成了全局变量(不推荐使用)
在写代码的过程中,我们应该尽量少的去使用全局变量
原因:1、使用全局变量容易污染全局空间
2、全局变量很难被垃圾回收机制回收(垃圾回收机制)
声明提升:
变量声明的提升
变量会被提升到它对应作用域的顶端
函数声明提升:
执行语句在声明函数之前,这个函数也是可以被正常来调用的(这是JS中的函数声明提升,并不是编译)
使用声明式函数才可以被提升,使用字面量方式不能被提升