JS范围的实例分析

首先,看看作用域的概念:函数——读、写、域——范围或空间。范围:可以用来读和写操作的范围或空间。

第二,查看浏览器读取js文件的步骤(脚本标记的内容)。

第一步:预解析-根据var函数找出可能的参数或函数,并将它们放入内存(相当于仓库)。

例1:



警报(a)
var a=1
功能FN1(){ alert(2)}



根据VaR和功能,你可以找到:一个FN1

在预解析过程,变量自动赋值给变量未定义,即a定义;函数本身的功能本身,即FN1 =功能FN1(){ alert(2)}。

所以preparsing:a定义,FN1 =功能FN1(){ alert(2)}

如果函数和变量名,所以只有值。

例2:



警报(a)
var a=1
函数A(){警报(2)}
var a=10



根据var和函数,您可以找到:111

在预解析过程中:a =未定义的,a函数a(){警报(2)},a =未定义

在preparsing,只有=函数(){ alert(2)}

例3:

如果在情况2中var a = 10是后跟一个函数函数A(){警报(4)}

然后,预解析的结果变成:A =函数A(){警报(4)},因为最后一个值将覆盖前一个值。

第二步是:从代码的渐进性解读

例4:

首先,我们知道下面的代码preresolution:=函数(){ alert(4)}



当A =函数(a){警报(4)}时,请注意(a)读此行,因此打印出函数(a){警报(4)}
var = 1 读这行是,是重新分配A,所以A = 1
当a = 1时,读取(a)/读取此行,因此打印输出为1。
函数A({警报)(2)}读取此行,而不是重新赋值,并且不打印任何内容,因为该函数未被调用。
当a = 1时,读取(a)/读取此行,因此打印输出为1。
var = 10 读这行是,是重新分配A,所以A = 10
当a = 10时,读取(a)/读取此行,因此打印输出为10。
函数A({警报)(4)}读取此行,而不是重新赋值,并且不打印任何内容,因为该函数未被调用。
当a = 10时,读取(a)/读取此行,因此打印输出为10。



对贸易数据交换上述概念的内容,有助于理解分析前,也没有使用域的预分析,在分析前------------------------域发生域时

例5:

下面的代码预览:a定义,FN1 =函数(){ alert(FN1){ alert(一)var a = 2;},然后开始执行代码



var = 1 读此行,将其赋值给a,a=1
功能(FN1){ alert();var a = 2;} / /读这一行,没有发生什么
(FN1); / /读这条线的函数被调用时,它也分为两个步骤
1,函数被称为函数域的第一个解析,并将它的预解析放在自己的仓库中。
2,逐行解读代码:当读取警报(A)时,函数域的预解析结果是未定义的,因此未定义打印。当您读取var a = 2时,将预解析结果转换为a=2。
警报(a);读此行时,a = 1,打印出1



示例6:根据示例5进行了一个小的更改,var a = 2被更改为a=2,然后输出是不同的。



var = 1 1
功能FN1(){ alert();a = 2;}
(FN1); / /函数调用时,因为里面有功能无无功,在预解析没有结果。当警报(一)在执行函数时,一个是在功能(父域),这时一个= 1,所以1是打印出来。
函数a = 2是全局变量,所以a=2
警报(a);由于a = 2,所以打印出2



示例7:在示例6的基础上,更改



var a=1
(一){ alert函数fn1();a = 2;}
(FN1);
警报(a);



结果将是:定义,1。想想吧。提示:功能FN1(一)等效于作用FN1(VaR)

以上是本文的全部内容,希望本文的内容能给大家的学习或工作带来一定的帮助,同时也希望能给予更多的支持!