延迟函数及作用域的理解

延迟函数(以下两者的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中的函数声明提升,并不是编译)

使用声明式函数才可以被提升,使用字面量方式不能被提升

 

posted @ 2022-03-03 22:28  Crazier_Z  阅读(155)  评论(0编辑  收藏  举报