首先,看看
作用域的概念:
函数——读、写、域——范围或
空间。范围:可以用来读和写
操作的范围或空间。
第二,查看
浏览器读取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)
以上是本文的全部内容,希望本文的内容能给大家的
学习或
工作带来一定的帮助,同时也希望能给予更多的
支持!