javascript中是否使用var定义的区别,以及有名函数和匿名函数的区别。

一、var和默认定义的区别,请先看下面两个例子:
例子1:

var a=1;

function fun(){

a=2;

alert(a);
}
fun();
alert(a);
结果:2 ,2    函数中默认定义(也就是直接赋值)a=2时,此时的a使用的是外层定义的a,因此改变了外层a的值。
例子2:
var a=1;
function fun(){
var a=2;
alert(a);
}
fun();
alert(a);

结果:2 ,1    函数中直接赋值语句var a=2,中的a使用的是函数作用域的变量a,因此没有改变外层a的值。

总结:其实JavaScript中变量的定义是,当使用var定义时就是在当前域先定义变量,然而使用默认的定义时,就现在当前作用域寻找该变量,如果当前作用域没有该变量,就往上也就是外层去寻找,如果没找到就是undefine,找到就是外层的值。


二、var定义的特性

例子1:
var a=1;
function f(){
  if(!a){
    var a=2;
  }
  alert(a);
}
f();
alert(a);
结果: 2  1
刚开始,可能会认为,a=1,所以!a为false,所以输出两个1.

其实真正的过程是这样的:

function f(){

var a;

  if(!a){//没有值 所以为true

  a=2;

  }

  alert(a);

}
结论:var 定义会"上升",编译器解析的时候会把从变量声明放在该作用域的最上方,注意:是把声明上升,var a;是声明。var =1;是定义。(有赋值才算定义)
例子2

var a=1;function f(){ 

 if(!a){ 

   a=2; 

 }

 alert(a);}

f();

alert(a);

结果: 1  1

这个就是前面说的,使用和不使用var定义的区别了,这里a=2,使用的是外层的a,所以a=1,所以if不执行。以上就是var定义变量的特性。

三、有名函数和匿名函数有名函数:

funtion fun(){....

}

匿名函数: function(){
}

两种函数使用的区别:

有名函数:

fun();

匿名函数:

var fun=function(){


}

fun();

匿名函数的使用需要用表达式的方式将函数赋值给变量 此变量存储的是函数的地址。

此外有名函数和var 定义变量一样,有上升的特性。

fun();

function fun()

{

alert(1);

}

这样是没有问题的,定义在使用之后,因为编译的时候 函数的定义会上升至该作用域最顶端。

fun();

var fun=function (){

alert(1);

}

匿名函数则不能如此使用,会报错。

同时有名函数的函数名是唯一的,如果重复定义,则新的覆盖旧的。

例子:

function fun(){

alert("old");

}

fun();

function fun(){

alert("new");

}

结果  new

而匿名函数,使用变量接收函数地址,如果重复定义,新旧都存在。


例子:

var fun1= function()

{

alert("old");

}

var fun2=fun1; //将旧的函数地址给fun2

var fun1=function()

{

fun2();

alert("new");

}

fun1();

结果 old new  注意:这里fun1()被指向了新地址 ,fun2()保留以前的地址。所以两个函数都存在。

并不是fun1改变后,fun2也跟着改变。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值