龙空技术网

初识JS中的作用域和闭包

安一颗小白杨 386

前言:

此刻各位老铁们对“作用域js”大致比较着重,小伙伴们都想要了解一些“作用域js”的相关资讯。那么小编同时在网摘上网罗了一些对于“作用域js””的相关文章,希望你们能喜欢,各位老铁们快快来学习一下吧!

今天,我们来初步了解一下作用域和闭包的相关知识点,因为是初步了解,所有不会深入,不会太难,希望对大家有所帮助。

作用域是什么?

说白了,作用域就是一个代码区域,或者也可以理解成为一个运行环境。

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