Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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_Invocation - Fatal编程技术网

Javascript 为什么记录一个函数表达式会在没有调用的情况下执行函数?

Javascript 为什么记录一个函数表达式会在没有调用的情况下执行函数?,javascript,invocation,Javascript,Invocation,此函数 function mapForEach(arr, fn) { var newArr = []; for (var i = 0; i < arr.length; i++) { newArr.push( fn(arr[i]) ) }; return newArr; } var arr1 = [1, 2, 3]; 此变量声明不会调用和 var arr2 = mapForEach(arr1, function (item) { ret

此函数

function mapForEach(arr, fn) {

  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    newArr.push(
      fn(arr[i])
    )
  };

  return newArr;
}

var arr1 = [1, 2, 3];
此变量声明不会调用和

var arr2 = mapForEach(arr1, function (item) {
  return item * 2;
});
但在登录到控制台时调用

console.log(arr2); // [2,4,6] in the console
为什么这里不需要调用

console.log(arr2());
我仍然不清楚这和

function foo () { return 2 === 2 };
日志函数定义

console.log(foo); // function foo() { return 2 === 2 } 
在日志函数中调用,日志返回值

console.log(foo()); // true

我认为这里发生的只是对JavaScript控制台中的行为或var声明返回值中的行为的轻微混淆

控制台将始终显示您键入的内容的值。e、 g.函数调用的返回值。然而,var的返回值是未定义的。这意味着,虽然没有赋值的mapForEach将显示[2,4,6],但在这两种情况下都确实调用了该函数,只是var arr2=没有显示您期望的内容


有关var声明返回值的更多背景信息,请参阅。

,因为它是由该变量声明调用的。你为什么不这么认为?您只是将结果分配给名称arr2。如果你认为你在分配一个函数,为什么要把它命名为数组呢?我没有给它命名,我正在阅读它并试图学习,除非你天生就对Javascript有很好的了解,否则这个过程是必须发生的。我认为返回值的赋值在执行之前不存在于内存中,现在必须在声明为arr2之后执行,而arr2将在程序执行过程中同步可用。所以我希望console.logarr2记录函数定义。幸运的是,我们有像堆栈溢出这样的问题,我们可以问一些我们还没有答案的问题,而不是我们有答案的问题…?这对你的咆哮没有帮助。你为什么不这样认为的问题是探索性的,以确定你的错误观念在哪里,这样我们就可以直接解决它们,而不是仅仅让你读一本书来解决你所有的错误观念,不管它们是什么,但是对于一个特定的问题,它几乎是无用的。我没有回答为什么你不这么认为,但是如果你认为你在分配一个函数,为什么你把它命名为数组呢?为什么假设我给它命名?如果我把它命名为“array”,并且把它命名为“array”,意味着我知道我的问题的答案,那么我为什么要问我的问题呢?我不是故意刁难你,我只是看到很多人在这里因为问问题而被责骂。这不是它的目的吗?当我能够区分合法问题和非法问题,或者适合一本书回答的问题和适合一个人回答的问题时,我会这样做。您确实将其命名为var arr2=…,这就是我所指的。轻微更正:赋值的返回值未定义不是真的arr2=[2,4,6]计算为[2,4,6]; var语句的返回值是未定义的,在控制台中,var arr=[2,4,6]的计算结果更接近于未定义的事实,甚至不能是程序中的左值。非常感谢@Amadan-我感觉我的答案不适合使用赋值的上下文,然而,我们试图根据OP中的示例进行解释。将更新答案以澄清!
console.log(foo()); // true