Javascript调用函数表达式

时间:2012-05-29 22:03:51

标签: javascript

通过这种方式调用函数是有道理的:

print(square(5));  
function square(n){return n*n}

但为什么下面的调用不起作用?

print(square(5));  
square = function (n) {  
  return n * n;  
}  

如果我们坚持使用“square = function(n)”的格式,解决方案是什么?

6 个答案:

答案 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();