今天,我们来初步了解一下作用域和闭包的相关知识点,因为是初步了解,所有不会深入,不会太难,希望对大家有所帮助 。
文章插图
作用域是什么?说白了,作用域就是一个代码区域,或者也可以理解成为一个运行环境 。
JS中有两种作用域,全局作用域和函数作用域 。
// window环境var a = 123;var b = 234;var c = 456; //函数作用域function A(){ var a = 123; var b = 234; var c = 456;} A();全局作用域:直接在脚本中写代码,在全局作用域中声明得变量,会提升到脚本顶部,并成为window属性 。(前几节中有涉及)
函数作用域:在函数中书写代码,声明的变量会提升到函数的顶部,不会成为全局属性,在函数内部声明的变量不会污染全局变量 。
因此,在编程过程中,尽可能的将功能封装在函数中 。
立即执行函数(IIFE)当函数成为一个表达式的时候,既不会提升,也不会污染全局变量 。
将函数变成表达式的方法之一,就是用小括号就函数包裹起来 。代码如下:
( function 函数名(){ 函数体;})如此一来,这样的函数就无法通过函数名来调用了 。
如果,函数作为表达式并且立即调用,这样的函数就被成为立即实行函数:
( function 函数名(){ 函数体;})();( function 函数名(){ 函数体;}());调用的小括号可以在里也可以在外 。
由于大部分情况下,函数的函数名不起作用,因此,立即执行函数一般不书写函数名,没有函数名的函数,称之为匿名函数 。
作用中可以使用的变量在全局作用域下只能使用全局作用中声明的变量(包括函数) 。
在函数作用域下,既可以使用函数作用域中声明的变量,也可以使用外部环境中声明的变量(包括函数) 。
var a = 123;console.log(a);打印出来123function A(){ console.log(a);//也可以打印出来123; var b = 234;} A();console.log(b);//这里会报错,因为b未定义 。
文章插图
内部变量和外部变量冲突的时候,使用内部变量,在内部没有的情况下,依次向外层环境中找 。
内部可以使用外部,但外部不可能使用内部的(你的就是我的,我的还是我的) 。
初探闭包从严格意义上来讲,闭包是一种现象 。
闭包就是内部函数可以使用外部函数环境中的变量 。
天就讲到这里,关于闭包的知识,后期会进行详细的解说 。
【初识JS中的作用域和闭包】
推荐阅读
- 茶叶中的鸭屎香
- HTTP2.0中的Server Push
- 聊聊java中的进制问题
- 初识HTTP报文
- 一文带你揭穿葡萄酒中的山寨货、水货、假货
- 西游记中的善恶 西游记最无辜的妖怪
- 5张图彻底理解Python中的浅拷贝与深拷贝
- 茶叶水洗脸好处多
- 茶中的氟化物过量摄入会导致骨质疏松症
- 招聘|职场中的女性该如何注意自己的妆容及言行举止