Javascript 什么';这两者有什么区别?
我可以使用测试(3) 但是当我使用Javascript 什么';这两者有什么区别?,javascript,node.js,Javascript,Node.js,我可以使用测试(3) 但是当我使用 var test = function(x) { return x + 2; }; 我不能使用测试(3) 为什么?第二个代码片段是IIFE-的一个示例 第一组参数中表达式的结果定义了一个接受一个参数(名为x)的函数。第二组参数立即调用它,并返回结果。由于调用时未传递任何参数,x是undefined,因此它计算表达式undefined+2,并返回NaN在第一种情况下定义函数,因此可以执行test(3) 在第二种情况下,您是一个函数
var test = function(x) {
return x + 2;
};
我不能使用测试(3)
为什么?第二个代码片段是IIFE-的一个示例
第一组参数中表达式的结果定义了一个接受一个参数(名为
x
)的函数。第二组参数立即调用它,并返回结果。由于调用时未传递任何参数,x
是undefined
,因此它计算表达式undefined+2
,并返回NaN
在第一种情况下定义函数,因此可以执行test(3)
在第二种情况下,您是一个函数,因此,结果可能是
NaN
。在第二种情况下,您利用了JavaScript闭包。闭包允许您控制作用域和名称空间,并声明私有方法和变量
考虑以下几点:
var test = (function(x) {
return x + 2;
})();
测试
现在等于以下各项:
var test = (function(x) {
return x + 2;
})();
{publicFunction1:function(){},publicFunction2:function(){}
该函数在声明后立即调用,此时x
没有值。在函数声明(超出其范围)之前初始化x
,以解决您遇到的问题:
var test = (function() {
var privateVar1;
var privateVar2;
function privateFunction() {
}
return {
publicFunction1: function() {
},
publicFunction2: function() {
}
};
})();
因为在第二个示例中,您将test定义为返回值,而不是functionBecause()在运行时立即执行函数,所以test将获得不带参数的函数的结果(NaN)。然后您尝试将NaN作为一个函数运行,您可以执行
var test=(函数(x){returnx+2;})(3)代码>,但这违背了函数的要点。