Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';这两者有什么区别?_Javascript_Node.js - Fatal编程技术网

Javascript 什么';这两者有什么区别?

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) 在第二种情况下,您是一个函数

我可以使用测试(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),但这违背了函数的要点。