-
第一种是使用function语句定义函数
function abc(){
alert('abc');
}
-
第二种是在表达式中定义函数
var 函数名 = function(参数1,参数2,…){函数体};
首先谈一下声明式:
//像声明变量一样,将通过function(){}标识符创建的匿名函数直接赋值给变量,以该变量作为调用函数名称
var a = function () {
alert("a");
}
a();
var a = function () {
alert("aa");
}
a();
他们是没有带具体名称的函数,其结果是:a,aa....
再是定义式:
//以function关键字后跟函数名称及(){}来直接定义命名函数
function b() {
alert("b");
}
b();
function b() {
alert("bg");
}
b();
他们都有自己的函数名称,其执行结果就不一样了。 他们的结果是:bg、bg.这里的执行结果有些人就不清楚了,为什么会这样呢?
这就要从JavaScript解释引擎机制上说了! 在采用定义式创建同名函数时,后创建的函数会覆盖先创建的函数。这种差别是由于JavaScript解释引擎的工作机制所导致的。JavaScript解释引擎在执行任何函数调用之前,首先会在全局作用域中注册以定义式创建的函数,然后再依次执行函数调用。由于注册函数时,后定义的函数重写了先定义的函数,因此无论调用语句位于何处,执行的都是后定义的函数。
对于声明式创建的函数,JavaScript解释引擎会像对待任何声明的变量一样,等到执行调用该变量的代码时才会对变量求值。由于JavaScript代码是从上到下顺序执行的,因此当执行第一个example()调用时,example函数的代码就是首先定义代码;而当执行第二个example()调用时,example函数的代码又变成了后来定义的代码。
例如:
//定义
var add = function(a,b){
return a+b;
}
//调用函数
document.write(add(50,20));
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数的定义</title>
</head>
<body>
<button onclick=demo1()>function函数</button>
<button onclick=a()>匿名函数</button>
<script>
// 使用关键字function定义函数
// 优先级最高 在任何位置都可以调用
function demo1(){
console.log('函数被调用了');
}
// 在表达式中定义函数
// 只能在函数定义之后调用
var a=function(){
console.log('匿名函数');
}
// 调用函数
// demo1();
// a();
</script>
</body>
</html>
arguments
在函数代码中,使用特殊对象 arguments,开发者 无需明确指出参数名,就能访问它们。
关于变量和参数问题:
函数外面定义的变量是全局变量,函数内可以直接使用。
在函数内部没有使用var定义的=变量则为全局变量,
*在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。
js函数定义的参数没有默认值,(形参的默认值在之前只有新版火狐支持,目前新版的chrome浏览器也可以支持)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量的作用域</title>
</head>
<body>
<script>
/* 全局变量:
在函数外部声明的变量都是全局变量
在函数内部不使用var关键字定义变量也是全局变量
局部变量:
在函数内部使用var声明变量是局部变量
注意:
在函数内部定义了和全局变量同名的局部变量
那么局部变量就改变了全局变量的作用域了
在函数内部优先使用局部变量
*/
var a=11;
function Func(){
// console.log(a);
b=20;
var c=30;
var a=50;
console.log(a,c);
a=10;
}
Func();
console.log(a,b);
</script>
</body>
</html>