Javascript function definite & variable scope 方法定义及变量范围

一,方法定义的两种方式

javascript有两种方法定义方式,分别为

  • 声明定义
  • 表达式定义(也称匿名方法)

声明定义

通过声明的方式定义及使用方法的例子如下:

function myFunction() {
    var a = 4;
    return a * a;
} 
myfunction();

值得注意的是:函数声明不属于表达式,所以其声明的花括号后不加分号。

表达式定义

表达式定义的方式为,定义一个匿名方法,然后将其付给一个变量,通过变量名来访问方法。例子如下:

var x = function (a, b) {return a * b};
var z = x(4, 3);

值得注意的是:由于这种方式的定义属于表达式,所以方法的花括号后要加分号。

二,自调用方法(self-invoking method)

前面描述的两种方法定义后,使用方法需要显示调用方法执行。但javascript提供了一种自调用的方式,方法定义后即执行。

(function() {
    alert("Hello");
})();

可以看到是将一个匿名方法通过小括号包起来,然后在加一个小括号使之执行。浏览器执行到该方法定义时,会立马调用执行,弹出hello。

三,方法也是对象

方法定义后,他本身也即为一种对象,可以访问方法对象的属性和方法。列举一二。

参数的长度:

function myFunction(a, b) {
    return arguments.length;
}

获得方法体的字符串:

 function myFunction(a, b) {
    return a * b;
}
var txt = myFunction.toString();

四,变量范围(variable scope)

全局变量(global variable)

不属于任何方法的变量,他们能被全局所有代码共享使用。比如:

var a = 4;
function myFunction() {
    return a * a;
}

其中a就是全局变量

又比如:

 function myFunction() {
     a = 5;
    return a * a;
}

着重强调的是a没有使用var声明,所以他也是一个全局变量。

本地变量(local variable)

定义在任何代码块,或方法中用加var声明的变量,例如:

function myFunction() {
  var a = 4;
  return a * a;
  }

其中a是local variable。

对象变量

javascript可以使用OO的方式编程。我们在js中可以创建类,并通过类,new一个对象。如:

function User(name,age) {
    this.name = name;
    this.age = age;
}

可以看到,我们在this上,添加了变量name和age(既是添加到了User的prototype上)。那这两个变量将从属于基于User prototype创建的对象,他们需要通过对象来访问。如:

var tom = new User('Tom',100);
alert(tom.name);

值得注意的是,定义到通过this定义到prototype的function访问方式,也同对象变量一样,需要通过对象访问。

五,参考链接:

http://www.w3schools.com/js/jsfunctiondefinition.asp http://www.w3schools.com/js/jsfunctionclosures.asp