【javascript】关于函数的定义
函数使用关键字 function 来定义,定义的方式有两种——函数定义表达式和函数声明语句。下面示例代码中的两种定义写法:
//函数定义表达式 var square = function(x){ return x * x; }; //函数声明语句 function square(x){ return x * x; };
尽管函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同。和通过 var 声明变量一样,函数定义语句中的函数被显式地“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用 var 的话,只有变量声明提前了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中的所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在声明一个 javascript 函数之前调用它。
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>js-function</title> </head> <body> </body> </html> <script type="text/javascript"> distance(0,0,3,4); //函数声明语句————无论定义在哪里,都会被“提前”到脚本或函数的顶部。 function distance(x1,y1,x2,y2){ var dx = x2 - x1; var dy = y2 - y1; alert(Math.sqrt(square(dx) + square(dy))); }; //函数定义表达式————只有变量声明提前了,而变量的初始化代码仍然在原来的位置。需要注意js执行顺序。 var square = function(x){ return x * x; }; </script>
上面的代码,由于 square 是函数定义表达式并且定义在了最后,导致在执行 distance 函数的时候,square 的值是 undefined。
解决方法:
1、将函数定义表达式写法改成函数声明语句写法。
2、将函数定义表达式写在执行函数(distance(0,0,3,4);)之前。