关于Java Script中声明提前的问题

Java Script中声明提前有两种情况!

什么是声明提前?

在正式执行程序前,都会先预读所有var声明的变量和function声明的函数,集中到当前作用域的顶部集中声明。  ***赋值留在原地***

这里涉及到作用域的概念:

作用域简单来说就是一个变量的可用范围。

作用域分为两种:

1.全局作用域:专门保存全局变量的对象,  全局变量:在任何时候,任何位置都可被访问

2.函数作用域:专门保存函数内部的局部变量的对象

局部变量:2类:1. 参数变量  2. 在函数内声明的只在函数调用时的函数内部才可使用! 

1.var声明提前:   

例如:

console.log(a);

var a=100;

console.log(a);

程序执行时,就会变成

var a;

console.log(a);

a=100;

console.log(a);

因此第一个输出就会输出:undefined

第二个输出就会输出100

2.函数声明提前

大家都知道函数创建的方式有三种:

1.声明提前方式创建:

function fun(){};

在程序执行前都会先预读function声明的函数,并把它提到当前作用域顶部,程序执行时自上而下解释执行。

例如:

var a=100;

console.log(a);

console.log(fun());

function fun(){};

在程序执行时就会变成:

var a=100;

function fun(){};

console.log(a);

console.log(fun());

2.函数名直接量创建函数:

var fun=function(){};

这种创建函数的方式只是会把函数名提前到当前作用域顶端,值会留在原地

 例如: 

var a=100;

console.log(a);

console.log(fun());

var fun=function(){};

在程序执行时就会变成:

var a=100;

var fun;

console.log(a);

console.log(fun());

fun=function(){};

3.使用实例化创建函数

var fun=new Function(){"参数","return"};

这种方式跟函数名直接量一样只会把函数名提前,赋值会留在原地。但是相对于函数名来创建函数来说,实例化创建的函数执行时效率要差一些,因为这种方式要求函数体内的参数和返回值必须用""包裹起来,执行时JS底层会自动将字符串转换为JS语句,这样无形的就增加了运行的时间,效率自然会慢一些。


综上所诉:JS中声明提前的VIP通道只有两种一种是var声明的变量另一种就是function声明的函数

下面我们来看一些具体的案例:


var n=10;
function fun(n){
     console.log(m);
     var m=n;
     n++;  

   console.log(m);
}
fun(n); 
console.log(n);      

console.log(m); 


var n=10;
function fun(){
    n++;   
    console.log(n);
    n=9;   
   console.log(n);
}
fun();      

console.log(n); 












  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值