JavaScript作用域和闭包

2025-05-09 14:45:07

1、全局作用域在所有函数声明或者大括号之外定义的变量,都在全局作用域里。不过这个规则只在浏览器中运行的JavaScript里有效。

JavaScript作用域和闭包

3、所以,应该尽量使用局部变量,而不是全局变量局部作用域在代码某一个具体范围内使用的变量都可以在局部作用域内定义。这就是局部变量。JavaScript里有两种局部作用域:函数作吹涡皋陕用域和块级作用域。从函数作用域开始。函数作用域在函数里定义一个变量时,它在函数内任何地方都可以使用。在函数之外,就无法访问它了。比如下面这个例子,在sayHello函数内的hello变量:

JavaScript作用域和闭包

5、因为这里有两个变量,函数提升可能会珑廛躬儆导致混乱,因此就不会生效。所以一定要在使用函数之前定义函数。函数不能访问其他函数的作用域在分别定义的不同的函数时,虽然可以在一个函数里调用一个函数,但一个函数依然不能访问其他函数的作用域内部。下面这例,second就不能访问firstFunctionVariable这一变量。

JavaScript作用域和闭包

7、如果把作用域的机制可视化,可以想象有一个双向镜(单面透视玻璃)。能从里面看到外面,但是外面的人不能看到你。

JavaScript作用域和闭包

9、多层函数就意味着多个双向镜。理解前面关于作用域的部分,就能理解闭包是什么了。闭包在一个函数内新建另一个函数时,就相当于创建了一个闭包。内层函数就是闭包。通常情况下,为了能够使得外部函数的内部变量可以访问,一般都会返回这个闭包。

JavaScript作用域和闭包

11、当使用闭包来控制副作用时,实际上是需要考浞骒镤迫虑哪些可能会混淆代码工作流程的部分,比如Ajax或者超时。要把事情说清楚,还是看例子比较方便:比如说你要给为你朋友庆生,做一个蛋糕。做这个蛋糕可能花1秒钟的时间,所以写了一个函数记录在一秒钟以后,记录做完蛋糕这件事。为了让代码简短易读,使用了ES6的箭头函数:

JavaScript作用域和闭包

13、这就是使用闭包减少副作用:可以创建一个任你驱使的内层闭包。私有变量和闭包前面已经说过,函数内的变量,在函数外部是不能访问的既然不能访问,那tc 就可以称作私有变量。确实是需要访问私有变量的。这时候就需要闭包的帮助了。

JavaScript作用域和闭包

15、打开Chrome的开发者工具,定位到Source页下(或者是Firefox的Debugger页),你就能看到可以访问的变量了。

JavaScript作用域和闭包

17、通过断点调试作用域闭包和作用域并不是那么难懂。一旦使用双向镜的思维去理解。在函数里声明一个变量时,只能在函数内访问。这些变量的作用域就被限制在函数里了。如果你在一个函数内又定义了内部函数,那么这个内部函数就被称作闭包。它仍可以访问外部函数的作用域。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢