以这种方式调用函数是有意义的:
print(square(5));
function square(n){return n*n}
但是为什么下面的调用不起作用?
print(square(5));
square = function (n) {
return n * n;
}
如果我们坚持使用“square = function (n)”的格式,有什么解决办法?
以这种方式调用函数是有意义的:
print(square(5));
function square(n){return n*n}
但是为什么下面的调用不起作用?
print(square(5));
square = function (n) {
return n * n;
}
如果我们坚持使用“square = function (n)”的格式,有什么解决办法?
“正常”函数声明被提升到范围的顶部,因此它们始终可用。
变量声明也被提升,但直到执行该特定代码行时才会发生赋值。
因此,如果您这样做是在范围内var foo = function() { ... }
创建变量foo
,并且它最初是undefined
,并且只有稍后才会为该变量分配匿名函数引用。
如果“稍后”是在您尝试使用它之后,解释器不会抱怨未知变量(毕竟它确实已经存在),但它会抱怨您尝试调用undefined
函数引用。
var s=function ()
{
console.log("hi there");
document.write("function express called");
alert("function express called");
}
s();
您需要更改顺序,在声明和分配变量之前使用它:
square = function (n) {//Better use "var" here to avoid polluting the outer scope
return n * n;
}
print(square(5));
正确的方法var
:
var square = function (n) { // The variable is now internal to the function scope
return n * n;
}
print(square(5));
在函数表达式中,您像使用任何其他值一样使用函数,您是否期望:
print(a);
var a = 5
去工作?(我真的不是在问)
在第二种情况下,square
是一个需要(重新)赋值的常规变量。考虑:
square = function (n) {
return "sponge";
}
print(square(5));
square = function (n) {
return n * n;
}
您希望输出在这里是什么?
var s=function ()
{
console.log("s");
alert("function expression with anomious function");
}
s();
var otherMethod=function ()
{
console.log("s");
alert("function expression with function name");
}
otherMethod();