Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 - Fatal编程技术网

Javascript 为什么两个相同的语句返回的结果不同,只是用括号括住了其中一个而不是另一个?

Javascript 为什么两个相同的语句返回的结果不同,只是用括号括住了其中一个而不是另一个?,javascript,Javascript,为什么两个相同的语句返回的结果不同,只是用括号括住了其中一个而不是另一个 function foo(bar){ return !bar; }(false) ? false : true; // returns true 就像说: if(false){ //false } else { //true } 您的函数未被调用,并且您的条件为false,这意味着它返回第二条语句(该语句具有//true) 第二个是非常不同的 (function foo(bar){ re

为什么两个相同的语句返回的结果不同,只是用括号括住了其中一个而不是另一个

function foo(bar){
    return !bar;
}(false) ? false : true; // returns true

就像说:

if(false){
   //false
} else {
   //true
}
您的函数未被调用,并且您的条件为
false
,这意味着它返回第二条语句(该语句具有
//true


第二个是非常不同的

(function foo(bar){
    return !bar;
}
(false) ? false : true)
是这样的:

function foo(bar){
    return !bar;
}

var temp = foo(false)

if(temp){
    //false
} else {
    //true
}
从技术上讲,您正在创建一个以
false
为参数的自执行函数。它返回的任何内容都取决于条件。因此:

  • 您作为参数传递了
    false
  • 该函数返回一个反转,即
    true
  • 将对返回进行计算,由于返回为
    true
    ,因此它将执行条件的第一条语句(该语句具有
    //false

自执行函数通常具有这些形式,并且通常用于形成闭包(这超出了本问题的范围)

试试这个:

function foo(bar)
{
    alert('fun 1 executed');
    return !bar;
}
(false) ? false : true; // returns true
这是:

(function foo(bar)
{
    alert('fun 2 executed');
    return !bar;
}
(false) ? false : true);
请注意,在案例1中,该函数从未被调用。

对于我来说,它不是


但无论如何,这是一个奇怪的构造,如果它有可能被误解,你可能不应该首先使用它。

你不必运行这样的代码。只要使用我非常了解的控制台。我只是觉得jsfiddle.net可以方便地向其他人展示一些东西。“它不适合我。”-这是因为在你的fiddle中,这两种情况都是函数表达式。从前面的注释判断,OP似乎在控制台中完全按原样运行每个块(而不是将它们分配给某个对象),这意味着第一个块由一个函数语句和一个单独的三元条件表达式组成。@nnnn您可能是对的。我想知道为什么OP会这样做。无论如何,这里有一些很好的答案,所以我猜谜团已经解开了。第一个代码片段作为函数声明进行计算,后面是条件运算符。第二个是作为条件运算符计算的,其中条件是立即被调用的函数表达式。
var result = (function(innerParam){
    //function body
}(passedParam));

and

//this form commonly seen in jQuery plugins
var result = (function(innerParam){
    //function body
})(passedParam);
function foo(bar)
{
    alert('fun 1 executed');
    return !bar;
}
(false) ? false : true; // returns true
(function foo(bar)
{
    alert('fun 2 executed');
    return !bar;
}
(false) ? false : true);