通过这种方式调用函数是有道理的:
print(square(5));
function square(n){return n*n}
但为什么下面的调用不起作用?
print(square(5));
square = function (n) {
return n * n;
}
如果我们坚持使用“square = function(n)”的格式,解决方案是什么?
答案 0 :(得分:10)
“普通”函数声明被提升到范围的顶部,因此它们始终可用。
变量声明也会被提升,但赋值在该特定代码行执行之前不会发生。
因此,如果你var foo = function() { ... }
你在范围内创建变量foo
并且它最初是undefined
,并且只有稍后才会为该变量分配匿名函数引用。
如果在您尝试使用它之后“稍后”,则解释器不会抱怨未知变量(毕竟它已经存在),但它会抱怨您试图调用undefined
功能参考。
答案 1 :(得分:1)
:classifyInput
SETLOCAL
set _inputType=
set input=%~1
rem // a string is a "name of folder" iff it has no '/', '\\' or ':' in it, and a pathname otherwise
echo %input%|findstr /r "\\\\ / :" >nul
if %errorlevel% == 1 (
set _inputType=FOLDER
) else (
if "%input:~1,1%" == ":" (
set _inputType=ABSOLUTE_PATHNAME
echo You gave me absolute pathname.
) else (
set _inputType=RELATIVE_PATHNAME
)
)
ENDLOCAL & set _inputType=%_inputType%

var s=function ()
{
console.log("hi there");
document.write("function express called");
alert("function express called");
}
s();

答案 2 :(得分:0)
您需要更改顺序,在声明和分配之前使用变量:
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));
答案 3 :(得分:0)
在函数表达式中,您使用的函数与任何其他值一样,您会期望:
print(a);
var a = 5
上班? (我不是真的在问)
答案 4 :(得分:0)
在第二种情况下,square
是受(重新)赋值的常规变量。考虑:
square = function (n) {
return "sponge";
}
print(square(5));
square = function (n) {
return n * n;
}
您期望输出在这里?
答案 5 :(得分:0)
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();