- collapse sourceview plaincopy to clipboardprint?
// 直接声明函数myfunc
function myfunc(/* arguments */) {
}
// 把匿名函数赋值给本地变量myfunc
var myfunc = function(/* arguments */) {
}
注意,上面两种函数声明方式存在细微的差别:第一种方式在声明时就是一个命名的函数,无论是声明在调用之前、调用之后,甚至是不会执行到的位置(例如return语句之后或是永远不会为真的分支里),都在整个作用域可访问;第二种方式是通过把匿名函数赋值给变量的方式,严格意义上说这不是一个函数的声明(function declaration)而是一个函数表达式(function expression),在赋值之前这个函数不能被任何代码访问到,也就是说这个赋值必须在调用之前完成,否则调用时会出现错误:"TypeError:
undefined is not a function"。例如:
- collapse sourceview plaincopy to clipboardprint?
myfunc1(); // 能够正常调用,因为myfunc1采用直接声明的方式
function myfunc1() {
}
myfunc2(); // 出错 TypeError: undefined is not a function