函数名仅仅是指向函数的指针,function sum(){...} var anotherSum = sum; 注意,使用不带圆括号的函数名是访问函数指针,而非调用函数。如果要用anotherSum来调用函数的话,还是要加圆括号。js中函数没有重载的概念
1.函数声明 function functionName(arg0, arg1, arg2) {
//函数体}
2.函数表达式来定义函数
var functionName = function(arg0, arg1, arg2) {
//函数体
}; 匿名函数赋值给一个变量
(function(){
//函数体
})(); 立即执行函数表达式 ,匿名函数
return function(){
//函数体
}; 匿名函数
var add = function foo(a, b){
//函数体
}; 命名式函数表达式,不常见。
3.函数构造器,不常用
解析器对函数声明和函数表达式并非一视同仁,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到他所在的代码行,才会真正被解释执行。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> // alert(outer()); // function outer() // { // var localVal = 30; // return localVal; // } alert(foo());//要用foo来调用函数的时候必须得加上() var foo = function () { var localVal = 30; return localVal;//控制台报错Uncaught TypeError: foo is not a function } </script> </body> </html>
函数的声明和变量的声明会被提前。上面那个例子中var foo这个声明在alert的前面,这时foo还是一个undefined
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
高级程序设计里面内容:
var someFunction = function(){
//这里是块级作用域
};
someFunction();
这个例子先定义了一个函数,然后立即调用了它。定义函数的方式是创建一个匿名函数,并把匿名
函数赋值给变量someFunction。而调用函数的方式是在函数名称后面添加一对圆括号,即
someFunction()。通过前面的例子我们知道,可以使用实际的值来取代变量count,那在这里是不是
也可以用函数的值直接取代函数名呢? 然而,下面的代码却会导致错误。
function(){
//这里是块级作用域
}(); //出错!
这段代码会导致语法错误,是因为JavaScript 将function 关键字当作一个函数声明的开始,而函
数声明后面不能跟圆括号。然而,函数表达式的后面可以跟圆括号。要将函数声明转换成函数表达式,
只要像下面这样给它加上一对圆括号即可。
(function(){
//这里是块级作用域
})();