首页 > 代码库 > javascript 函数初探 (三)

javascript 函数初探 (三)

javascript 变量的作用域:


  这是一个至关重要的问题。特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域。也就是说变量是在某个函数中定义的,那么她在函数以外的地方是不可见的。而如果函数是定义在if或for这样的代买块中,那么她随处可见。

  全局变量:是定义在所有函数只外的变量。相反局部变量则是定义在某个函数中。其中,函数内的代码可以像访问自己的局部变量一样访问全局变量,反之则不可以。

var num = 1;function her(){    var count = 2;    num++;    return num;    }her(); // 2her(); // 3count // count is not defined

这里还有一点非常重要,如果我们声明变量时没有使用var语句,该变量就会默认为全局变量:

function her(){    num = 1;}num; // undefinedher();num; // 1

看看发生了什么:在函数被调用之前num是不存在的,该变量num在函数首次被调用的时候创建,并被赋予全局作用域,这会使得我们在函数之外的任何地方去访问它。

注:最好总是使用var语句来声明变量。

  可以考虑使用单一‘var模式‘例:

var a, b=1, c=true, d;

这样一来,我们可以在很大程度上减少污染全局变量。\(^o^)/YES!

 

函数也是数据:


  在javascript中,函数其实也是一种数据。也就是说我们可以把函数赋给一个变量。

var her = function(){    return Hello}

这种定义方式通常被叫做‘函数标识记法’。

上面是一个函数表达式。函数表达式可以被命名,称为命名函数表达式:

var f = function her(){    return Hello  }

这种方式也是合法的,但我们常常不会用到。(在这里her是函数的名字,而不是变量。IE会错误的创建f, her两个变量)。

这样看起来,命名函数表达式和函数声明并没有神马区别。但她们其实是不同的。两者的差别表现于她们所在的上下文。函数声明只会出现在程序代码里(在一个函数的函数体内,或在程序主体中)。

// 函数声明function her1(){    return 1;}// 命名函数表达式var f = her()2{   return 1;}alert(typeof her1) // functionalert(typeof her2) // function

所以,javascript中的函数也是一种数据类型,只不过她有两种特性:

1. 她们所包含的是代码。

2. 她们是可执行的(可调用的)。

 

如何向变量那样使用函数?

var her = function(a, b){    return a + b;  }var beauty = her;alert(typeof beauty); // functionbeauty(1, 2); // 3

所以函数的命名规则与变量的命名规则是一样的。<( ̄︶ ̄)>~~~~~~

 

匿名函数:


我们可以这样定义一个函数:

var f = function her(a){    return a;}

通过这种方式定义的函数常被称为匿名函数(即没有名字的函数),特别是当她不被赋值给变量单独使用的时候。在这种情况下,她有两种优雅的用法:

1. 您可以将匿名函数作为参数传递给其它函数,这样,接受方函数就能利用我们所传递的函数来完成某件事情。

2. 您可以定义某个匿名函数来执行某些一次性任务。

 

下一回我们详细探讨一下匿名函数的用法 <( ̄︶ ̄)>~~~~~~

 

javascript 函数初探 (三)