函数包含独立的代码块,函数在被调用时,代码块中的语句则被执行。语言的描述总是无力的,先看个例子吧:
function myFunction(p1, p2) { var p3 = p1 + p2 return p3; // 该函数将p3变量的值返回 }
定义一个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" }
如非必要,尽量不要在函数内使用全局变量,函数本身就是追求独立性的。若在函数内乱使用全局变量,会使整个程序变得高耦合,牵一发而动全身。在任何一门编程语言中,都是追求低耦合、高分离;高耦合,低分离,那叫垃圾!(实际工程中有时也是不得不选择做垃圾,不过那都是没办法的)
每当调用某个函数,就好比某个函数按照套路放出了一个小宇宙;有时之前放出的小宇宙还没爆炸,又新放出一个小宇宙,这样就同时存在了好几个小宇宙。不过不用担心,函数的小宇宙都是独立运行的,小宇宙之间的局部变量是相互独立的,总之除了外部的全局变量是公用的,小宇宙之间都是相互独立的。