js 中声明变量 “提前”
1.变量定义提升:
声明语句:
(1)var声明语句:
变量声明语句会被“提前”至脚本或者函数的顶部,但是初始化的操作则还在原来var语句的位置执行。例如,下面的例子,所示:
functionfun(){alert(x);varx=666;alert(x);}//此函数在js真正执行前,会根据变量声明提前变为:functionfun(){varx;//变量声明语句提前,alert(x);//结果为"undefined"x=666;//初始化的操作还在原来的位置alert(x);//结果为“666”}
(2)function声明语句:用来定义函数的
函数定义表达式: var f= function(x){return x+1;}//匿名函数表达式
Var f=function ff(x){return x+1;}//具(有)名函数表达式,
具名函数表达式的函数名只能在创建函数内部使用,即采用此种方法创建的函数在函数外层只能使用f不能使用ffi的函数名。ff的命名只能在创建的函数内部使用
函数声明语句: function f(x){return x+1;}
使用函数声明语句的话,函数名称和函数体均提前,使用函数定义表达式,js会将此代码拆分两行代码分别执行。先把变量名提升,函数的表达式仍然在原来的位置.如下面的例子,所示:
在javascript引擎进行“预编译”时,也就是代码真正执行之前,会有“声明提前”,下面的函数例子,var getName 与 function getName 都是声明语句,区别在于 var getName 是函数表达式,函数表达式最大的问题,在于js会将此代码拆分为两行代码分别执行。因此会变成:vargetName=function(){alert(“xiyin”);};//通过函数变量表达式创建了一个getName的函数functiongetName(){alert(“xiyin11”);}//声明一个叫getName函数。vargetName;//只提升变量声明functiongetName(){alert(“xiyin11”);}//提升函数声明,覆盖var的声明getName=function(){alert(“xiyin”);}//函数表达式剩下的赋值再次覆盖functiongetName声明
所以在执行getName()时,输出的结果是xiyin
总结:这就是在js中常说的变量声明提前,这种小细节容易被忽略,所以在这,做个简单总结。变量声明提升,对于两种形式成立,var声明的变量,function声明的变量,具体怎么提前,上面的例子已经很清楚了。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。