温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

js 中声明变量 “提前”

发布时间:2020-06-29 04:35:40 来源:网络 阅读:702 作者:蜗牛oscersong 栏目:开发技术

1.变量定义提升:

   声明语句:

(1)var声明语句:

         变量声明语句会被“提前”至脚本或者函数的顶部,但是初始化的操作则还在原来var语句的位置执行。例如,下面的例子,所示:

 function fun(){
    alert(x);
    var x=666;
    alert(x);
}//此函数在js真正执行前,会根据变量声明提前变为:
function fun(){
    var x;  //变量声明语句提前,
    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会将此代码拆分为两行代码分别执行。因此会变成:



var getName = function () { alert (“xiyin”);};
//通过函数变量表达式创建了一个getName的函数
function getName() { alert (“xiyin11”);}   
//声明一个叫getName函数。
   
var getName;//只提升变量声明
function getName() {alert (“xiyin11”);}   //提升函数声明,覆盖var 的声明
getName=function(){ alert (“xiyin”);} 
 //函数表达式剩下的赋值再次覆盖function getName声明

所以在执行getName()时,输出的结果是xiyin

总结:这就是在js中常说的变量声明提前,这种小细节容易被忽略,所以在这,做个简单总结。变量声明提升,对于两种形式成立,var声明的变量,function声明的变量,具体怎么提前,上面的例子已经很清楚了。

 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI