<返回更多

初识JS中的作用域和闭包

2019-09-06    
加入收藏

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

初识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);打印出来123
function A(){
 console.log(a);//也可以打印出来123;
 var b = 234;
} 
A();
console.log(b);//这里会报错,因为b未定义。
初识JS中的作用域和闭包

 

内部变量和外部变量冲突的时候,使用内部变量,在内部没有的情况下,依次向外层环境中找。

内部可以使用外部,但外部不可能使用内部的(你的就是我的,我的还是我的)。

初探闭包

从严格意义上来讲,闭包是一种现象。

闭包就是内部函数可以使用外部函数环境中的变量。

天就讲到这里,关于闭包的知识,后期会进行详细的解说。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>