肉渣教程

JS 函数

上一节 下一节

函数包含独立的代码块,函数在被调用时,代码块中的语句则被执行。语言的描述总是无力的,先看个例子吧:

function myFunction(p1, p2) {
  var p3 = p1 + p2
  return p3;    // 该函数将p3变量的值返回
}

运行一下

JavaScript函数的语法

定义一个JavaScript函数,首先要使用function这个关键词;紧接着这个关键词的name是函数名,函数名可以自定义创建;函数名后的()内可以为空,也可以有1个或多个参数,如parameter1, parameter2, parameter3,这些参数就是要传入函数内部的,它们被称作形参。

function name(parameter1, parameter2, parameter3) {
  // 当函数被调用时,内部代码即被执行
}

上述传入函数内部的形参parameter1, parameter2, parameter3只会在函数内部有效,属于局部变量,之后回进一步介绍啥叫局部变量。

局部变量

什么叫局部变量呢?局部变量就是在函数内部用var声明的变量,这些变量的作用域就是那一次调用的函数的运行过程,当那一次函数运行结束后,这个变量就不存在了。因此,局部变量,是在函数内部定义的(包括传入函数的形参),其作用域就是当次运行的函数,当次函数运行结束后,局部变量则会被清空。

因为作用域的问题,所以局部变量无法在函数外使用。

// nickName变量无法在这里使用

function myFunction() {
  var nickName = "Jerk Zhang";
  // 这里可以使用nickName变量
}

// nickName变量无法在这里使用

运行一下

函数可以直接调用全局变量

如下例所示,函数可以直接调用全局变量;函数内语句可对全局变量的值进行赋值改变。

var nickName = "Jerk Zhang";

myFunction();

function myFunction() {
  // 这里可以使用全局变量nickName
  document.getElementById("demo1").innerHTML =
  typeof nickName + " " + nickName;

  // 对全局变量nickName可以进行赋值
  nickName = "Jerk.Z"
}

运行一下

当局部变量与全局变量同名

当局部变量与全局变量同名,函数内则使用局部变量,全局变量不会受到任何影响。

var nickName = "Jerk Zhang";

myFunction();

function myFunction() {
  var nickName = "反清复明";

  // 这里用的是局部变量nickName
  document.getElementById("demo1").innerHTML =
  typeof nickName + " " + nickName;

  // 这里是对局部变量nickName进行赋值
  nickName = "Jerk.Z"
}

运行一下


如非必要,尽量不要在函数内使用全局变量,函数本身就是追求独立性的。若在函数内乱使用全局变量,会使整个程序变得高耦合,牵一发而动全身。在任何一门编程语言中,都是追求低耦合、高分离;高耦合,低分离,那叫垃圾!(实际工程中有时也是不得不选择做垃圾,不过那都是没办法的)


函数的小宇宙是独立的

每当调用某个函数,就好比某个函数按照套路放出了一个小宇宙;有时之前放出的小宇宙还没爆炸,又新放出一个小宇宙,这样就同时存在了好几个小宇宙。不过不用担心,函数的小宇宙都是独立运行的,小宇宙之间的局部变量是相互独立的,总之除了外部的全局变量是公用的,小宇宙之间都是相互独立的。


JS 函数

上一节 下一节